46

LinkedList イテレータを最初の要素に「リセット」する方法を知る必要があります。

例えば:

LinkedList<String> list;

Iterator iter=list.listIterator;

iter.next();

iter.next();

何度も繰り返し、イテレータを何度も移動した後、イテレータの位置を「リセット」する必要があります。`

イテレータを最初の要素に「リセット」する方法を知りたい

この方法で最初の要素のリスト反復子を取得できることを知っています。

iter= list.listIterator(1);

これが最善の解決策ですか?または、Oracleドキュメントで何かを見逃したのでしょうか?

4

7 に答える 7

54

メソッドを再度呼び出しlistIteratorて、リストの先頭を指すイテレータのインスタンスを取得できます。

iter = list.listIterator();
于 2012-12-03T18:20:52.000 に答える
24

まったく使用しないのが最善LinkedListです。通常、すべての分野で遅く、便利ではありません。(主に前面への挿入/削除の場合、特に大きな配列の場合は LinkedList の方が高速です)

を使用ArrayListし、繰り返します

int len = list.size();
for (int i = 0; i < len; i++) {
  Element ele = list.get(i);
}

リセットは簡単です。もう一度ループするだけです。
イテレータの使用を主張する場合は、新しいイテレータを使用する必要があります。

iter = list.listIterator();

(LinkedList の利点を人生で一度だけ見た: while ループをループして最初の要素を削除することができた)

于 2012-12-03T18:23:44.393 に答える
5

順序が問題にならない場合は、 andメソッドを使用して、同じ反復子で逆方向に反復することができます。hasPrevious()previous()

ListIterator<T> lit = myList.listIterator(); // create just one iterator

最初は反復子が先頭にあり、前方反復を行います。

while (lit.hasNext()) process(lit.next()); // begin -> end

次に、イテレータが最後にあり、後方反復を実行できます。

while (lit.hasPrevious()) process2(lit.previous()); // end -> begin
于 2015-01-16T09:55:15.683 に答える