2016-11-13 1 views
1

Considérons une liste chaînée de chaînes que je suis quelque partJava: supprimer une gamme d'indices d'une liste

LinkedList<String> names = getNames(); 

Maintenant, je veux supprimer les premiers k éléments de la liste. À l'heure actuelle, je vais le faire de cette façon:

for (int i = 0 ; i < k ; i++) { 
    names.removeFirst(); 
} 

Est-il possible de le faire de manière plus efficace et d'appeler à la place quelque chose comme:

names.removeRange(0, k); 

Notez que je préfère ne pas construire un tout nouveau liste à l'aide sublist(), comme pour les petites valeurs k, popping k fois serait encore plus efficace que la construction de la nouvelle liste

Répondre

2

Peut-être quelque chose comme ceci:

names.subList(0, k).clear(); 

cela est plus efficace, mais ne libère pas de mémoire selon sublist il est juste une vue:

names.sublist(k, names.size()); 
+0

Ce ne sera pas plus efficace de faire simplement 'noms = names.sublist (k, noms. taille()) '? – SomethingSomething

+0

Je préfère ne pas construire une nouvelle liste, car pour les petites valeurs 'k', il serait moins efficace de simplement faire sauter' k' fois – SomethingSomething

+2

@SomethingQuelquechose 'subList' ne crée pas de nouvelle liste. C'est une vue sur la même liste sous-jacente. – janos