Ja, da Sie auf diese Weise keinen Bereich aus externem Code entfernen. Tun Sie stattdessen Folgendes:
list.subList(start, end).clear();
Dies ruft tatsächlich removeRangehinter die Kulissen. †
Das OP fragt, warum removeRangenicht Teil der Listöffentlichen API ist. Der Grund ist in Punkt 40 von Effective Java 2nd ed beschrieben, und ich zitiere ihn hier:
Es gibt drei Techniken zum Verkürzen zu langer Parameterlisten. Eine besteht darin, die Methode in mehrere Methoden aufzuteilen, für die jeweils nur eine Teilmenge der Parameter erforderlich ist. Wenn dies unachtsam gemacht wird, kann dies zu zu vielen Methoden führen, aber es kann auch dazu beitragen , die Anzahl der Methoden zu verringern , indem die Orthogonalität erhöht wird. Betrachten Sie zum Beispiel die java.util.ListSchnittstelle. Es werden keine Methoden zum Auffinden des ersten oder letzten Index eines Elements in einer Unterliste bereitgestellt, für die beide drei Parameter erforderlich wären. Stattdessen wird die subListMethode bereitgestellt , die zwei Parameter verwendet und eine Ansicht einer Unterliste zurückgibt. Diese Methode kann mit den Methoden indexOfoder kombiniert lastIndexOfwerden, von denen jede einen einzelnen Parameter hat, um die gewünschte Funktionalität zu erhalten. Darüber hinaus ist diesubListDie Methode kann mit jeder Methode kombiniert werden, die mit einer ListInstanz arbeitet, um beliebige Berechnungen für Unterlisten durchzuführen. Die resultierende API hat ein sehr hohes Leistungsgewicht.
Man kann argumentieren, dass removeRangees nicht so viele Parameter gibt und daher wahrscheinlich kein Kandidat für diese Behandlung ist, aber da es eine Möglichkeit gibt, removeRangeüber das aufzurufen subList, gibt es keinen Grund, die ListSchnittstelle mit einer redundanten Methode zu überladen .
† In der AbstractList.removeRangeDokumentation heißt es:
Diese Methode wird von der clearOperation in dieser Liste und ihren Unterlisten aufgerufen. Das Überschreiben dieser Methode, um die Interna der Listenimplementierung zu nutzen, kann die Leistung des Vorgangs für diese Liste und ihre Unterlisten erheblich verbessern clear.
Siehe auch OpenJDKs Implementierung von AbstractList.clearund SubList.removeRange.