Evet, çünkü bir aralığı dış koddan bu şekilde kaldırmazsınız. Bunun yerine şunu yapın:
list.subList(start, end).clear();
Bu aslında removeRangeperde arkasını çağırıyor . †
OP, neden genel API'nin bir removeRangeparçası olmadığını sorar List. Nedeni, Etkili Java 2. baskı Madde 40'ta açıklanmıştır ve burada alıntı yapıyorum:
Aşırı uzun parametre listelerini kısaltmak için üç teknik vardır. Birincisi, yöntemi, her biri yalnızca bir parametre alt kümesi gerektiren birden çok yönteme bölmektir. Dikkatsizce yapılırsa, bu çok fazla yönteme yol açabilir, ancak aynı zamanda ortogonaliteyi artırarak yöntem sayısını azaltmaya da yardımcı olabilir . Örneğin, java.util.Listarayüzü düşünün . Her ikisi de üç parametre gerektiren bir alt listedeki bir öğenin ilk veya son dizinini bulmaya yönelik yöntemler sağlamaz. Bunun yerine subList, iki parametre alan ve bir alt listenin bir görünümünü döndüren yöntemi sağlar . Bu yöntem , istenen işlevselliği sağlamak için her biri tek bir parametreye sahip olan indexOfveya lastIndexOfyöntemleriyle birleştirilebilir . Dahası,subListyöntem, alt listeler üzerinde rastgele hesaplamalar gerçekleştirmek için bir örnek üzerinde çalışan herhangi bir yöntemle birleştirilebilir List. Ortaya çıkan API, çok yüksek bir güç-ağırlık oranına sahiptir.
Bir iddia edebilir removeRangebirçok parametre vardır ve muhtemelen bu nedenle bir bu tedavi için aday ama çağırmak için bir yol olduğunu göz önüne alındığında gelmez removeRangearacılığıyla subList, kaplamak için hiçbir neden yoktur Listyedekli yöntemle arayüz.
†AbstractList.removeRange dokümantasyon diyor ki:
Bu yöntem, clearbu listedeki işlem ve alt listeleriyle çağrılır. Liste uygulamasının dahili özelliklerinden yararlanmak için bu yöntemi geçersiz kılmak , bu listedeki ve alt Listelerindeki işlemin performansını önemli ölçüde artırabilir clear.
Ayrıca, OpenJDK'nin AbstractList.clearve SubList.removeRange.