답변:
나는 같은 질문이 있었고 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
장점은 루프 내에서 인덱스를 증가시키지 않는다는 것입니다 (반복 당 한 번만 Iterator # next를 호출하도록주의해야하지만 맨 위에서 만 수행).
asList("zero", "one", "two")
어떤 종류의 컬렉션? List 인터페이스의 구현 인 경우 it.nextIndex() - 1
.
다음과 같이하십시오.
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.
}
를 참조하십시오 여기 .
iterator.nextIndex()
에 대한 후속 호출에서 반환되는 요소의 인덱스를 제공합니다 next()
.
iterator가있는 현재 인덱스를 반환하기 위해 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 목록을 한 번에 한 항목 씩 살펴보고 항목의 텍스트를 인쇄 한 다음 "is at index"다음 반복기가 찾은 인덱스를 인쇄합니다. :)
이미 답을 알고 있었지만 정보를 추가해 보겠습니다.
컬렉션을 명시 적으로 언급했듯이 listIterator
모든 유형의 컬렉션에 대한 색인을 가져 오는 데 사용할 수는 없습니다 .
목록 인터페이스 -ArrayList, LinkedList, Vector 및 Stack.
가지고 모두 iterator()
와listIterator()
인터페이스 설정 -HashSet, LinkedHashSet, TreeSet 및 EnumSet.
오직 iterator()
지도 인터페이스 -HashMap, LinkedHashMap, TreeMap 및 IdentityHashMap
더 반복자가 없습니다,하지만 통해 사용하여 반복 할 수 keySet()
/ values()
또는 entrySet()
같은 keySet()
과 entrySet()
반환 Set
및 values()
반환Collection
.
따라서 iterators()
모든 컬렉션 유형에 대한 현재 인덱스를 가져 오기 위해 값을 지속적으로 증가시키면서 사용하는 것이 좋습니다 .