回答:
独自の変数を使用して、ループ内でインクリメントします。
it.nextIndex()
。コレクションがリストの場合に役立ちます。
同じ質問があり、ListIteratorを使用して機能していることがわかりました。上記のテストと同様:
List<String> list = Arrays.asList("zero", "one", "two");
ListIterator iter = list.listIterator();
while (iter.hasNext()) {
System.out.println("index: " + iter.nextIndex() + " value: " + iter.next());
}
next()を実際に取得する前に、必ずnextIndexを呼び出してください。
独自の変数を使用して簡潔にする方法は次のとおりです。
List<String> list = Arrays.asList("zero", "one", "two");
int i = 0;
for (Iterator<String> it = list.iterator(); it.hasNext(); i++) {
String s = it.next();
System.out.println(i + ": " + s);
}
出力(予想通り):
0: zero
1: one
2: two
利点は、ループ内でインデックスをインクリメントしないことです(ただし、ループごとに1回だけIterator#nextを呼び出すように注意する必要があります-上部で実行してください)。
asList("zero", "one", "two")
どんなコレクション?それがListインターフェースの実装である場合は、単にを使用できますit.nextIndex() - 1
。
ListIteratorを使用して、コレクションを反復処理します。コレクションがリストでない場合は、Arrays.asList(Collection.toArray())
最初にリストに変換するために使用します。
次のようなことをしてください:
ListIterator<String> it = list1.listIterator();
int index = -1;
while (it.hasNext()) {
index++;
String value = it.next();
//At this point the index can be checked for the current element.
}
intを使用して、ループ内でインクリメントします。
こちらをご覧ください。
iterator.nextIndex()
の後続の呼び出しで返される要素のインデックスを提供しますnext()
。
iterator.nextIndex()を使用して、イテレータが存在する現在のインデックスを返すために必要なすべてのこと。これは、独自のカウンター変数を使用するよりも少し簡単かもしれません(まだ機能します)。
public static void main(String[] args) {
String[] str1 = {"list item 1", "list item 2", "list item 3", "list item 4"};
List<String> list1 = new ArrayList<String>(Arrays.asList(str1));
ListIterator<String> it = list1.listIterator();
int x = 0;
//The iterator.nextIndex() will return the index for you.
while(it.hasNext()){
int i = it.nextIndex();
System.out.println(it.next() + " is at index" + i);
}
}
このコードは、list1リストを一度に1項目ずつ調べ、項目のテキストを出力し、次に「is at index」で、イテレータが見つけたインデックスを出力します。:)
あなたはすでに答えを持っていますが、いくつかの情報を追加しようと考えました。
コレクションを明示的に述べたように、listIterator
すべてのタイプのコレクションのインデックスを取得するために使用することはできません。
リストインターフェイス -ArrayList、LinkedList、Vector、Stack。
両方iterator()
ありますlistIterator()
インターフェースの設定 -HashSet、LinkedHashSet、TreeSet、EnumSet。
のみ iterator()
マップインターフェイス -HashMap、LinkedHashMap、TreeMapおよびIdentityHashMap
反復子はありませんが、keySet()
/ values()
またはentrySet()
as を使用して反復でき、return keySet()
およびentrySet()
returns Set
をvalues()
返しますCollection
。
したがって、iterators()
任意のコレクション型の現在のインデックスを取得するには、値を連続的にインクリメントして使用する方が適切です。