2012-08-12 2 views
1

: Collections FrameworkAbstractCollection이 iterator()를 구현하지 않는 이유는 무엇입니까? 에서

사람이 명확한 이유를 만들 수 "를 AbstractCollection의 클래스는 반복자() 및 크기() 적절한 서브 클래스에서 구현하는 방법을 제외하고, 모든 메소드의 구현을 제공합니다" 왜 iterator()에 대한 기본 동작이 없습니까? size()가이 질문의 기본값이 아닌 이유를 알 수 있습니다 : Why does AbstractCollection not implement size()?

답변

6

어떻게 될까요?

iterator() 메서드는 파생 클래스가 실제로 데이터를 제공하는 방법입니다.
AbstractCollection이 구현하는 모든 방법은 실제 구현에서 제공된 데이터를 사용하여 size()iterator()의 적절한 논리를 간단히 수행합니다.

2
AbstractCollection 데이터가 저장되는 방법을 알고하지 않습니다

때문에 iterator() 구현을위한 두 가지 선택이 있습니다 :

  • 는 추상적 인 방법 확인, 또는
  • 던져 UnsupportedOperationException이 많은 수행하는 방법 다른 방법 (예 : add 또는 remove).

오직 첫 번째 해결책 만이 의미가 있습니다. 컬렉션은 최소한 읽기만 허용해야하며 쓰기는 선택 사항 일 수 있습니다.

0

배열을 기반으로 한 목록, 링크 된 목록, 트리를 기반으로하는 정렬 된 목록을 생각해 보겠습니다. 배열 기반 컬렉션의 반복자는 인덱싱 된 위치를 기반으로 각 요소에 액세스 할 대상을 알아야합니다. 연결된 목록에 대한 반복자는 요소 간의 링크를 탐색하는 방법을 알아야합니다. 그리고 트리 기반 컬렉션을위한 반복자는 나무를 가로 지르는 방법 (예를 들어 너비 우선 또는 깊이 우선)을 알아야합니다. 이러한 모든 동작은 매우 다르며 구현에 따라 다릅니다.

관련 문제