>  기사  >  类库下载  >  JAVA 프로그래밍 아이디어---11.5 목록, 11.6 반복자

JAVA 프로그래밍 아이디어---11.5 목록, 11.6 반복자

高洛峰
高洛峰원래의
2016-10-17 09:12:521547검색

Collection 클래스의 계층 구조 다이어그램(소스 및 네트워크)은 다음과 같습니다.

JAVA 프로그래밍 아이디어---11.5 목록, 11.6 반복자

인터페이스: Iterator

public interface Iterable<T>

Iterable 인터페이스는 슈퍼 인터페이스입니다. 이 인터페이스에는 반환 유형이 Iterable인 iterator() 메서드가 하나만 있습니다. 이 인터페이스를 구현하면 개체가 "foreach" 문의 대상이 될 수 있습니다.


인터페이스: 컬렉션

public interface Collection<E> extends Iterable<E>

컬렉션 계층 구조의 루트 인터페이스입니다. 컬렉션은 컬렉션의 요소라고도 하는 개체 집합을 나타냅니다. 일부 컬렉션에서는 중복 요소(예: List, Queue)를 허용하지만 다른 컬렉션에서는 중복 요소(예: Set)를 허용하지 않습니다. 일부 컬렉션은 순서가 지정되어 있지만(예: List, TreeSet, LinkedHashSet, TreeMap, LinkedHashMap) 다른 컬렉션은 순서가 지정되어 있지 않습니다(예: HashSet, HashMap). JDK는 이 인터페이스의 직접적인 구현을 제공하지 않습니다. 즉, Set 및 List와 같은 보다 구체적인 하위 인터페이스의 구현을 제공합니다. 이 인터페이스는 일반적으로 최대 일반성이 필요한 곳에서 컬렉션을 전달하고 작업하는 데 사용됩니다.

인터페이스: 목록

public interface List<E> extends Collection<E>

순서가 지정된 컬렉션(시퀀스라고도 함). List 인터페이스는 Collection 인터페이스를 기반으로 하는 수많은 메소드를 추가하여 목록에 있는 각 요소의 삽입 또는 제거 위치를 정밀하게 제어할 수 있습니다. 사용자는 정수 인덱스(목록에서의 위치)를 기반으로 요소에 액세스하고 목록에서 요소를 검색할 수 있습니다.

List 인터페이스는 Collection 인터페이스에 지정된 것 외에 iterator, add,remove,equals 및 hashCode 메소드의 계약에 몇 가지 다른 규칙을 추가합니다.

List 인터페이스는 목록 요소에 대한 위치 지정(인덱싱) 액세스 방법을 제공합니다. 목록(Java 배열과 같은)은 0 기반입니다. 이러한 작업은 일부 구현(예: LinkedList 클래스)의 인덱스 값에 비례하는 시간에 수행될 수 있습니다. 따라서 특정 구현을 알 수 없는 경우 목록 요소(반복자 또는 foreach 루프)를 반복하는 것이 일반적으로 인덱스를 사용하여 목록을 순회하는 것(for 루프)보다 낫습니다.

List 인터페이스는 ListIterator라는 특수 반복자를 제공합니다. Iterator 인터페이스에서 제공하는 일반적인 작업을 허용하는 것 외에도 이 반복자는 요소 삽입 및 교체는 물론 양방향 액세스도 허용합니다. 목록의 지정된 위치에서 시작하는 목록 반복자를 가져오는 메서드도 제공됩니다.

추상 클래스: AbstractCollection

public abstract class AbstractCollection<E> extends Object implements Collection<E>

이 클래스는 Collection 인터페이스의 백본 구현을 제공하고 Collection 인터페이스의 List, Set 및 Queue 인터페이스를 구현합니다. 컬렉션 인터페이스 클래스는 이 추상 클래스를 상속하여 이 인터페이스를 구현하는 데 필요한 작업을 최소화할 수 있습니다.

이 인터페이스는 크기와 반복자를 제외한 Collection의 다른 인터페이스를 구현하고 추가 방법을 제한합니다.

불변 컬렉션을 구현하려면 프로그래머는 이 클래스를 확장하고 반복자 및 크기 메서드 구현을 제공하기만 하면 됩니다. (반복자 메서드에서 반환된 반복자는 hasNext 및 next를 구현해야 합니다.)

수정 가능한 컬렉션을 구현하려면 프로그래머는 이 클래스를 확장하고 반복자 및 크기 메서드 구현을 제공하는 것 외에도 이 클래스를 추가로 다시 작성해야 합니다. 메서드(그렇지 않으면 UnsupportedOperationException이 발생함), 반복자 메서드에서 반환된 반복자는 해당 제거 메서드도 구현해야 합니다.

추상 클래스: AbstractList

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>

이 클래스는 "랜덤 액세스" 데이터 저장소 구현의 필요성을 최소화하기 위해 List 인터페이스의 백본 구현을 제공합니다. (예: 배열(ArrayList)은 인터페이스에 필요한 작업을 지원합니다(즉, List 인터페이스의 구현은 Collection 인터페이스 메서드에서 확장됩니다). Collection 인터페이스를 구현하는 메소드의 경우 이 클래스는 AbstractCollection 추상 클래스를 상속하여 구현됩니다. 이 클래스의 구현되지 않은 메소드로는 get(int index) 및 size()가 있으며, set(int index, E 요소), add(int index, E 요소), Remove(int index), add(E 요소) 메소드는 다음과 같습니다. 제한.

지속적인 액세스 데이터(예: 연결된 목록 LinkedList)의 경우 이 클래스보다 AbstractSequentialList를 우선적으로 사용해야 합니다.

수정할 수 없는 목록을 구현하려면 프로그래머는 이 클래스를 확장하고 get(int) 및 size() 메서드 구현을 제공하기만 하면 됩니다.

수정 가능한 목록을 구현하려면 프로그래머는 set(int, E) 메서드를 추가로 재정의해야 합니다(그렇지 않으면 UnsupportedOperationException이 발생합니다). 목록의 크기가 가변적이면 프로그래머는 add(int, E) 및 제거(int) 메서드를 추가로 재정의해야 합니다.

클래스: ArrayList

public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable

ArrayList는 List 인터페이스의 가변 크기 배열 기반 구현입니다. 맨 아래 계층은 배열 구현을 사용하므로 임의 액세스 기능은 좋지만 지정된 위치에 삽입 및 삭제와 같은 작업에는 효율적이지 않습니다.

각 ArrayList 인스턴스에는 용량이 있습니다. 용량은 목록 요소를 저장하는 데 사용되는 배열의 크기를 나타냅니다. ArrayList 용량 크기를 지정하지 않은 경우 생성되는 인스턴스의 기본 용량은 10입니다. ArrayList에 요소가 추가되면 용량이 자동으로 늘어납니다.

이 클래스의 iterator 및 listIterator 메소드에 의해 반환된 반복자는 오류가 발생하지 않습니다. 반복자가 생성된 후에는 반복자 자체의 제거 또는 추가를 통해 목록이 구조적으로 수정되지 않는 한 언제든지 또는 어떤 방식으로든 목록을 검색할 수 없습니다. 목록이 수정되면 반복자는 ConcurrentModificationException을 발생시킵니다. 따라서 동시 수정이 발생하는 경우 미래의 지정되지 않은 시간에 임의의 비결정적 동작을 위험에 빠뜨리는 대신 반복자가 신속하게 완전히 실패합니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.