2010-02-01 10 views
4

컬렉션에서 열린 Iterator의 인스턴스는 전체 컬렉션을 메모리에 유지하고 next()가 호출 될 때마다 증가하는 위치에 액세스합니까? 또는 나는 무엇인가 놓치고 있냐?반복기는 Java로 어떻게 구현됩니까?

+1

항상 소스를보고 알아낼 수 있습니다. – skaffman

+0

소스 참조와 관련하여 JDK 클래스 ArrayList의 코드를 참조하십시오. http : //www.docjar.com/html/api/java/util/ArrayList.java .html Iterator는 내부 클래스로 구현됩니다. – sateesh

답변

10

Iterator의 구현은 특정 Collection에 따라 달라집니다. JDK 소스 코드를 보면, ArrayListLinkedList은 다른 이터레이터를 사용합니다.

Iterator은 구체적인 클래스가 아니기 때문에 인터페이스이므로 계약이 구현이 아니라는 것을 간단하게 지정합니다.

일반적으로 iterator는 컬렉션에 대한 참조와 해당 인덱스가있는 위치를 나타내는 일종의 인덱스를 저장합니다 (구현에 따라 다름).

4

총 구현에 따라 다르지만 일반적으로 (메모리 내 콜렉션 용으로 구성된 반복자의 경우) Iterator는 기본 컬렉션에 대한 참조를 가지므로 예, 메모리에 유지됩니다.

이 참조는 복제본이 아닐 가능성이 높기 때문에 반복자는 생성 된 컬렉션에 대한 동시 수정을 확인하는 이유입니다.

0

이는 완전히 Iterator과 관련된 객체에 따라 다릅니다. (거의) Iterator은 우리가 반복하는 Iterable과 관련이 있다는 것을 기억하십시오.

Iterable 클래스는 자신의 Iterator 클래스를 정의 할 수 있으며 요청시 next() 요소를 반환합니다.이 너무 deoends 않는 방법

는 데이터가 즉시 볼 수 있습니다 :

  • 그것은 도서관이나 어떤에서, 데이터베이스에서, 파일에서 모든 요소를 ​​가져올 수 있습니다.
  • 이미 메모리에있는 객체에서 모든 요소를 ​​가져올 수 있습니다.
  • 등의 경우 1에서

에 아마 메모리의 모든 내용을 저장하기에 유용하지 않을 것이다, 그러나 우리는 이미 메모리에 모든이 경우 2에서, 우리 수 (그리고 것) 참 다음 위치에있는 항목에 대한 객체를 쿼리합니다.

관련 문제