Oui, parce que ce n'est pas comme ça qu'on supprime une plage en dehors du code. A la place, faites ça :
list.subList(start, end).clear();
Cela appelle en fait removeRange
dans les coulisses. †
Le PO demande pourquoi removeRange
ne fait pas partie de la List
l'API publique. La raison est décrite au point 40 de Effective Java 2nd ed, et je la cite ici :
Il existe trois techniques pour raccourcir les listes de paramètres trop longues. La première consiste à décomposer la méthode en plusieurs méthodes, chacune d'entre elles ne nécessitant qu'un sous-ensemble des paramètres. Si cela est fait sans précaution, cela peut conduire à un trop grand nombre de méthodes, mais cela peut également aider à réduire le site le nombre de méthodes en augmentant l'orthogonalité. Par exemple, considérez le java.util.List
interface. Elle ne fournit pas de méthodes pour trouver le premier ou le dernier indice d'un élément dans une sous-liste, qui nécessiteraient toutes deux trois paramètres. Au lieu de cela, elle fournit la méthode subList
qui prend deux paramètres et renvoie un voir d'une sous-liste. Cette méthode peut être combinée avec la méthode indexOf
o lastIndexOf
dont chacune possède un seul paramètre, pour obtenir la fonctionnalité souhaitée. De plus, les subList
peut être combinée avec la méthode tout qui opère sur un List
pour effectuer des calculs arbitraires sur des sous-listes. L'API qui en résulte présente un rapport puissance/poids très élevé.
On peut dire que removeRange
n'a pas beaucoup de paramètres et n'est donc probablement pas un candidat pour ce traitement, mais étant donné qu'il y a une façon d'invoquer removeRange
à travers le subList
il n'y a aucune raison d'encombrer l'espace de travail de la Commission. List
avec une méthode redondante.
† Le site AbstractList.removeRange
de la documentation dit :
Cette méthode est appelée par le clear
sur cette liste et ses sous-listes. En surchargeant cette méthode pour tirer parti des éléments internes de l'implémentation de la liste, on peut substantiellement améliorer les performances de l clear
sur cette liste et ses sous-listes.
Voir également l'implémentation d'OpenJDK de la fonction AbstractList.clear
y SubList.removeRange
.