Iterator
의 Collection
과 같은 것이 없습니다. 반복기는 Collection
과 독립적으로 생성 될 수 있습니다. 어떤 Iterable
에서 얻을 수도 있고, 반복자를 구현하는 클래스를 만들 수도 있습니다. 가 이후이 가능한 모든 반복자에 대해 안정적으로 수행 할 수 없습니다, 그러나,
Iterator<X> it = ...;
List<X> list = new ArrayList<X>();
while (it.hasNext()) {
list.add(it.next());
}
참고 :
그러나, 당신은 그것을 반복하고 하나의 요소를 추가하여 Iterator
에서 ArrayList
를 얻을 수 있습니다 반복자가 영속적으로 반복 할 가능성이 있으므로 무한 루프가 발생하고 대부분은 OutOfMemoryError
이됩니다.
Google의 유틸리티 라이브러리 Google Guava을 살펴 보시기 바랍니다.
Iterator<X> it = ...;
List<X> list = Lists.newArrayList(it);
도서관은 일상 자바 코딩을위한 매우 유용한 방법의 톤이있다 : 그것은 당신이 다음을 수행 할 수 있도록리스트라는 클래스가 있습니다. 그것은 대부분 당신이 원하지만 표준 Java 6 API에서 찾을 수없는 모든 것을 담고 있습니다. next
, hasNext
및 remove
: 자바, Iterator
은 세 가지 방법으로 단지 인터페이스이기 때문에
다시 '호환성'이 유지된다는 보장이 없으므로 다시'ArrayList' 구현의 내부 세부 사항에 의존해서는 안됩니다. Apache Commons Collections, 특히 IteratorUtils를 참조하십시오. Iterator를 배열이나리스트로 변환하는 데 도움이되는 몇 가지 헬퍼를 제공합니다. – merryprankster
오, 확실히 좋은 지적입니다. iterator 인터페이스가 제한되고 팩토리에서 반환 된 실제 객체가 private 클래스의 인스턴스 인 이유가 있습니다 (구현이 미래에 변경 될 수 있으므로). 이 일은 만져서는 안되며 그렇습니다. –
@Ray Total : Iterator를 생성하는 우물 디자인 클래스는 java.lang.reflect의 검은 마법을 사용하지 않고 내부 데이터 구조에 액세스 할 수 없도록합니다. –