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?

31
demandé sur Krzysiek 2012-12-03 22:19:01

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)

18
répondu AlexWien 2013-11-11 20:54:43

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();
37
répondu anubhava 2012-12-03 18:20:52

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.

8
répondu tkane2000 2015-02-28 02:46:26

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
4
répondu ryenus 2015-01-17 12:32:56