2010-03-10 10 views

답변

5

ArrayList는 실제 데이터 구조이며 List 인터페이스의 구현입니다. 반복자 (Iterator)는 모든 데이터 구조를 탐색 할 수있는 인터페이스입니다 (반복자가 해당 데이터 구조에 사용 가능한 경우).

즉, ArrayList는 실제로 배열에 저장된 객체 참조 (또는 프리미티브)의 실제 목록입니다. ArrayList는 add (객체), remove (객체), get (색인) 등과 같이 List에 적용 할 수있는 모든 메서드의 구현을 제공하는 List 인터페이스의 "구현"입니다.

반복자 모든 데이터 구조를 탐색하는 더 일반적인 방법입니다. Set, List 등이 그것입니다. 한 가지 중요한 점은 데이터 구조의 모든 요소를 ​​한 번 탐색하고 완료 한 것입니다. 문서에서 Iterator는 next()와 hasNext()라는 두 가지 메소드를 처방하고 있음을 알 수있다. next는 기본 데이터 구조의 다음 요소를 반환하고 hasNext는 기본 데이터 구조에 다음 요소가 있는지 여부를 알려줍니다. ArrayList가 포함 된 여러 데이터 구조가 Iterator를 제공 할 수 있습니다.

왜 Arraylist의 get() 메소드 대신 iterator를 사용합니까?

은 음, 많은 인터페이스처럼, 반복자는 상관없이 기본이되는 구현 물건의 같은 종류의 일을하지 할 수 있습니다. 일부 데이터 구조를 통해 "반복"하려면 다음 중 하나를 수행 할 수 있습니다.

a) 데이터 구조를 변경하면 나중에 변경해야하는 데이터 구조 (예 : ArrayList)를 중심으로 작성된 코드 작성 (예 : HashSet) 또는

b) 데이터 구조에서 Iterator를 가져 와서 데이터 구조를 다른 것으로 변경하더라도 작동 할 동일한 hasNext/next 기법을 사용하십시오.

"인터페이스"및 "구현"이라는 단어에 익숙하지 않은 경우 "Java 인터페이스"에서 Google 검색을 수행해야합니다.

3

ArrayList에의 방법을 사용하는 대신 반복자를 사용하는 것이 왜

는 목록의 특정 종류이다. 나무 또는지도 또는 목록과 같은 data structure입니다.

Iterator은 데이터 구조를 통해 걷기위한 design pattern의 예입니다. 바이너리 트리와 같은 방식으로리스트를 탐색하지는 않지만 Iterator는 모든 데이터 구조 탐색기에 공통적 인 것을 설명하는 인터페이스를 제공합니다.

따라서 Iterator를 사용하여 ArrayList를 탐색 할 수 있습니다. 그것들은 같은 것이 아닙니다. 하나는 네비게이터이고 다른 하나는 컨테이너입니다.

그래서 ArrayList에 get() 메서드를 사용하는 것보다 Iterator를 선호 하시겠습니까?

모든 콜렉션에는 get() 메소드 (예 : 콜렉션 및 세트 및 2 진 트리)가있는 것은 아닙니다. ArrayList에서 해당 데이터 구조 중 하나로 전환해야하는 경우 get()을 호출하는 모든 코드를 다시 작성해야합니다.

그러나 반복자를 반환하면 코드 클라이언트는 구현을 변경했음을 알 필요가 없습니다.

get()을 사용하면 주어진 구현을 사용합니다. Iterator 인터페이스를 사용하는 경우 클라이언트에 영향을주지 않고 스마트 프록시와 같은 작업을 수행하도록 구현을 바꿀 수 있습니다.

클래스의 클라이언트에서 내비게이션에 대한 세부 정보를 숨기는 것입니다. ArrayList를 사용하면별로 중요하지 않을 수도 있습니다. 하지만 자신 만의 클래스를 설계한다면 Iterator를 사용하면 개인 정보를 제공하지 않고도 행동을 폭로 할 수있는 좋은 방법을 찾을 수 있습니다.

2

Sun에서 Collection 인터페이스 (물론 ArrayList 포함)를 구현하는 클래스에서 반복자를 사용하는 방법에 대한 자습서를 검토하십시오.

사용 방법에 대한 몇 가지 실습 예제를 제공하여 차이점을 시각화하는 데 도움이 될 수 있습니다.

관련 문제