java-réinitialiser l'itérateur de liste au premier élément de la liste
J'ai besoin de savoir comment "réinitialiser" L'itérateur LinkedList à son premier élément.
Par exemple:
LinkedList<String> list;
Iterator iter=list.listIterator;
iter.next();
iter.next();
, encore et encore et après de nombreux coups de l'itérateur j'ai besoin de "reset" de la position de l'itérateur. `
Je veux demander comment je peux "réinitialiser" mon itérateur au premier élément
Je sais que je peux obtenir l'itérateur de liste du premier élément de cette façon:
iter= list.listIterator(1);
Est-ce la meilleure solution? ou peut-être que j'ai manqué quelque chose dans Oracle docs?
4 réponses
Le mieux serait de ne pas utiliser LinkedList
du tout, Généralement il est plus lent dans toutes les disciplines, et moins pratique. (Lors de l'insertion/suppression principalement à l'avant, en particulier pour les grands tableaux LinkedList est plus rapide)
Utilisez ArrayList
, et itérez avec
int len = list.size();
for (int i = 0; i < len; i++) {
Element ele = list.get(i);
}
Reset est trivial, il suffit de boucle à nouveau.
Si vous insistez pour utiliser un itérateur, vous devez utiliser un nouvel itérateur:
iter = list.listIterator();
(Je n'ai vu qu'une seule fois dans ma vie un avantage de LinkedList: je pouvais faire une boucle whith une boucle while et supprimer le premier élément)
Vous pouvez appeler à nouveau la méthode listIterator
pour obtenir une instance d'itérateur pointant au début de la liste:
iter = list.listIterator();
C'est une solution alternative, mais on pourrait dire que cela n'ajoute pas assez de valeur pour que cela en vaille la peine:
import com.google.common.collect.Iterables;
...
Iterator<String> iter = Iterables.cycle(list).iterator();
if(iter.hasNext()) {
str = iter.next();
}
Appeler hasNext() réinitialisera le curseur de l'itérateur au début s'il s'agit d'une fin.
Si l'ordre n'a pas d'importance, nous pouvons ré-itérer en arrière avec le même itérateur en utilisant les méthodes hasPrevious()
et previous()
:
ListIterator<T> lit = myList.listIterator(); // create just one iterator
, Initialement, l'itérateur se trouve au début, nous n' avant itération:
while (lit.hasNext()) process(lit.next()); // begin -> end
, Puis l'itérateur se trouve à la fin, nous pouvons faire en arrière itération:
while (lit.hasPrevious()) process2(lit.previous()); // end -> begin