컬렉션에서 열린 Iterator의 인스턴스는 전체 컬렉션을 메모리에 유지하고 next()가 호출 될 때마다 증가하는 위치에 액세스합니까? 또는 나는 무엇인가 놓치고 있냐?반복기는 Java로 어떻게 구현됩니까?
4
A
답변
10
Iterator
의 구현은 특정 Collection
에 따라 달라집니다. JDK 소스 코드를 보면, ArrayList
과 LinkedList
은 다른 이터레이터를 사용합니다.
Iterator
은 구체적인 클래스가 아니기 때문에 인터페이스이므로 계약이 구현이 아니라는 것을 간단하게 지정합니다.
일반적으로 iterator는 컬렉션에 대한 참조와 해당 인덱스가있는 위치를 나타내는 일종의 인덱스를 저장합니다 (구현에 따라 다름).
4
총 구현에 따라 다르지만 일반적으로 (메모리 내 콜렉션 용으로 구성된 반복자의 경우) Iterator는 기본 컬렉션에 대한 참조를 가지므로 예, 메모리에 유지됩니다.
이 참조는 복제본이 아닐 가능성이 높기 때문에 반복자는 생성 된 컬렉션에 대한 동시 수정을 확인하는 이유입니다.
0
이는 완전히 Iterator
과 관련된 객체에 따라 다릅니다. (거의) Iterator
은 우리가 반복하는 Iterable
과 관련이 있다는 것을 기억하십시오.
각 Iterable
클래스는 자신의 Iterator
클래스를 정의 할 수 있으며 요청시 next()
요소를 반환합니다.이 너무 deoends 않는 방법
는 데이터가 즉시 볼 수 있습니다 :
- 그것은 도서관이나 어떤에서, 데이터베이스에서, 파일에서 모든 요소를 가져올 수 있습니다.
- 이미 메모리에있는 객체에서 모든 요소를 가져올 수 있습니다.
- 등의 경우 1에서
에 아마 메모리의 모든 내용을 저장하기에 유용하지 않을 것이다, 그러나 우리는 이미 메모리에 모든이 경우 2에서, 우리 수 (그리고 것) 참 다음 위치에있는 항목에 대한 객체를 쿼리합니다.
관련 문제
- 1. WCF에서 콜백은 어떻게 구현됩니까?
- 2. Set.toString()은 어떻게 구현됩니까?
- 3. @private는 어떻게 구현됩니까?
- 4. 채팅은 일반적으로 어떻게 구현됩니까?
- 5. OpenID는 어떻게 구현됩니까?
- 6. pthread_join은 어떻게 구현됩니까?
- 7. 코 루틴은 어떻게 구현됩니까?
- 8. 작업 예약은 어떻게 구현됩니까?
- 9. MarshalByRefObject는 어떻게 구현됩니까?
- 10. VTBL은 Java에서 어떻게 구현됩니까?
- 11. 일반적으로 힙은 어떻게 구현됩니까?
- 12. Firefox 알림은 어떻게 구현됩니까?
- 13. sarcmark는 어떻게 구현됩니까?
- 14. HttpSession은 어떻게 구현됩니까?
- 15. MPI 입출력은 어떻게 구현됩니까?
- 16. 조건 변수는 어떻게 구현됩니까?
- 17. neo4j 지속성은 어떻게 구현됩니까?
- 18. OS 수준에서 수면은 어떻게 구현됩니까?
- 19. Java에서 동적 바인딩은 어떻게 구현됩니까?
- 20. Scala.NET에서 Scala 클로저가 어떻게 구현됩니까?
- 21. SQL Server에서 DateDiff는 어떻게 구현됩니까?
- 22. Perl Catalyst 작업은 어떻게 구현됩니까?
- 23. 목표 C에서 카테고리는 어떻게 구현됩니까?
- 24. stl 반복자의 구문은 어떻게 구현됩니까?
- 25. 스칼라 : 배리어 동기화는 어떻게 구현됩니까?
- 26. PacMan의 Google 홈페이지에서 어떻게 구현됩니까?
- 27. Arrays.sort (Object [] a) - 어떻게 구현됩니까?
- 28. Ruby를 Java로 어떻게 사용합니까?
- 29. "Google-Promote/Restore"- 애니메이션은 어떻게 구현됩니까?
- 30. 프론트 컨트롤러 란 무엇이며 어떻게 PHP로 구현됩니까?
항상 소스를보고 알아낼 수 있습니다. – skaffman
소스 참조와 관련하여 JDK 클래스 ArrayList의 코드를 참조하십시오. http : //www.docjar.com/html/api/java/util/ArrayList.java .html Iterator는 내부 클래스로 구현됩니다. – sateesh