Java 컬렉션은 Java가 제공하는 툴킷으로 일반적으로 사용되는 데이터 구조와 같은 컬렉션, 링크 된 목록, 큐, 스택, 배열,지도 등입니다. Java Collection Toolkit의 위치는 java.util입니다.*.
Java 컬렉션은 목록 목록, 수집 설정, 맵 맵, 도구 클래스 (ITERATOR ITERATOR, ENUMERATION ENUMERATION 클래스, 배열 및 컬렉션) 4 부분으로 나눌 수 있습니다.
Java Collection Toolkit Framework는 다음과 같습니다.
참고 : 위의 프레임 워크 다이어그램을 살펴보면 먼저 트렁크, 즉 수집 및지도를 잡습니다.
컬렉션은 컬렉션의 기본 작업 및 속성을 포함하는 매우 추상적 인 컬렉션 인 인터페이스입니다.
컬렉션에는 두 개의 지점이 포함되어 있습니다 : 목록 및 세트.
(01) 목록은 순서 대기열이며 각 요소에는 색인이 있습니다. 첫 번째 요소의 인덱스 값은 0입니다.
구현 클래스에는 LinkedList, ArrayList, Vector, Stack이 포함됩니다.
(02) 세트는 중복 요소를 허용하지 않는 컬렉션입니다.
구현 클래스 설정에는 Hastset 및 TreeSet이 포함됩니다. Hashset은 실제로 Hashmap을 통해 구현되는 Hashmap에 의존합니다. TreeSet은 실제로 Treemap을 통해 구현되는 Treemap에 의존합니다.
맵은 매핑 인터페이스, 즉 키 값 키 값 쌍입니다. 맵의 각 요소에는 "키"와 "키에 해당하는 값"이 포함됩니다.
AbstractMap은 맵 인터페이스에서 대부분의 API를 구현하는 추상 클래스입니다. Hashmap, Treemap 및 약한 해쉬 맵은 모두 AbstractMap에서 상속됩니다.
해시 테이블은 사전에서 상속되지만 맵 인터페이스를 구현합니다.
다음으로 반복자를 살펴 보겠습니다. 컬렉션을 가로 지르는 도구입니다. 컬렉션의 구현 클래스가 iterator () 함수를 구현하고 반복자 객체를 반환해야하기 때문에 컬렉션은 반복자에 의존한다고 말합니다.
ListIterator는 트래버스 목록을 위해 특별히 존재합니다.
열거를 다시 살펴 보겠습니다. JDK 1.0에서 소개 한 추상 클래스입니다. 반복자와 마찬가지로 컬렉션을 가로 지르고 있습니다. 그러나 열거는 반복자보다 기능이 적습니다. 위의 블록 다이어그램에서 열거는 해시 가능, 벡터, 스택에서만 사용할 수 있습니다.
마지막으로 배열과 컬렉션을보십시오. 배열과 컬렉션을 작동하는 두 가지 도구 클래스입니다.
위의 전체 프레임 워크를 사용하면 각 클래스를 별도로 분석합니다.
컬렉션 아키텍처
아래에서는 컬렉션을 요약합니다. 컬렉션의 일부 프레임 워크 클래스의 관계 다이어그램을 살펴 보겠습니다.
컬렉션은 인터페이스이며 주요 두 가지는 다음과 같습니다. 목록 및 세트.
목록 및 세트는 인터페이스이며 컬렉션에서 상속됩니다. 목록은 정렬 된 대기열이며 목록에 반복 요소가있을 수 있습니다. 세트는 수학적 개념의 컬렉션이며 세트에는 반복 요소가 없습니다!
목록 및 세트에는 자체 구현 클래스가 있습니다.
쉬운 구현을 위해 AbstractCollection Abstract 클래스는 컬렉션에 정의되어 있으며 컬렉션의 대부분의 기능을 구현합니다. 이러한 방식으로 컬렉션 구현 클래스에서 AbstractCollection을 상속하여 중복 인코딩을 저장할 수 있습니다. AbstractList 및 AbstractSet는 AbstractCollection에서 상속 받고, 특정 목록 구현 클래스는 AbstractList에서 상속하고, Set 구현 클래스는 AbstractSet에서 상속됩니다.
또한 컬렉션에는 iterator 인터페이스를 반환하는 데 사용되는 iterator () 함수가 있습니다. 일반적으로 반복자 반복기를 통해 컬렉션을 통과합니다. Listiterator는 목록 인터페이스에 고유합니다. 목록 인터페이스에서 ListIterator 객체는 ListIterator ()를 통해 반환됩니다.
다음으로, 각 인터페이스와 추상 클래스의 소개를 살펴 보겠습니다. 그런 다음 구현 클래스에 대한 자세한 이해를 가질 것입니다.
1. 수집 소개
수집의 정의는 다음과 같습니다.
Public Interface Collection <E> 확장 반복 <E> {} 컬렉션의 기본 작업이 포함 된 인터페이스, 고도로 추상화 된 컬렉션입니다. 추가, 삭제, 청소, 트래버 싱 (읽기), 비어 있는지 여부, 크기, 특정 요소에 의해 보호되는지 등의 크기를 얻는 등.
컬렉션 인터페이스의 모든 서브 클래스 (직접 서브 클래스 및 간접 서브 클래스)는 매개 변수가없는 생성자와 매개 변수 수집이있는 생성자 두 가지 생성자를 구현해야합니다. 매개 변수가있는 생성자를 사용하여 수집 유형을 변환 할 수 있습니다.
// 수집 apiabstract boolean add (e 객체) 초록 부울 부울 (수집 <? 확장 e> collection) 초록 void void clear () 초록 부울 함유 (객체 객체) 초록 부울 containsall (컬렉션 <?> collection) 초록 부울 평등 (객체 객체) 추상 int hashcode () 추상 부울 iseMpty () 추상적 인 대안 () boolean boolean remel boolean () boolean remel boolean () removeall (Collection <?> Collection) Abstract Boolean retainall (Collection <?> Collection) Abstract int size () Abstract <T> T [] TOARRAY (T [] ARRAY) Abstract Object [] toArray ()
2. 목록 소개
목록의 정의는 다음과 같습니다.
공개 인터페이스 목록 <E> 확장 컬렉션 <E> {} 목록은 컬렉션에서 상속 된 인터페이스입니다. 즉, 목록은 컬렉션 유형입니다. 목록은 정렬 된 대기열이며 목록의 각 요소에는 색인이 있습니다. 첫 번째 요소의 인덱스 값은 0이고 후속 요소의 인덱스 값은 차례로 +1입니다. 세트와 달리 중복 요소가 목록에 허용됩니다. 목록의 공식 소개는 다음과 같습니다.
목록은 요소에 대한 주문을 유지하는 컬렉션입니다. 목록의 모든 요소에는 색인이 있습니다. 따라서 각 요소는 인덱스에 의해 액세스 할 수 있으며 첫 번째 인덱스는 0입니다. 일반적으로 목록은 요소가 고유 해야하는 세트와 비교하여 중복 요소를 허용합니다.
API 정보. 목록은 컬렉션 인터페이스에서 상속되므로 자연스럽게 컬렉션의 모든 기능적 인터페이스를 포함합니다. 목록은 정렬 된 큐이므로 자체 API 인터페이스도 있습니다. 기본에는 "지정된 위치에서 요소를 추가, 삭제, 획득 및 수정", "목록에서 하위 큐 얻기"등이 포함됩니다.
// 수집 apiabstract boolean add (e 객체) 초록 부울 부울 (수집 <? 확장 e> collection) 초록 void void clear () 초록 부울 함유 (객체 객체) 초록 부울 containsall (컬렉션 <?> collection) 초록 부울 평등 (객체 객체) 추상 int hashcode () 추상 부울 iseMpty () 추상적 인 대안 () boolean boolean remel boolean () boolean remel boolean () removeall (collection <?> collection) 초록 부울 retainall (collection <?> 컬렉션) 추상 int size () toarray (t [] array) toarray [] toArray [] toArray () toArray () // 컬렉션과 비교, 목록의 새로운 API : int location, e 객체, int location, extends e) get (int intof) (int intof (int)). lastIndexof (Object) Abstract Listiterator <E> ListIterator (int location) Abstract Listiterator <E> ListIterator () Abstract e 제거 (int location) 초록 E 세트 (int location, e 객체) 초록 목록 <E> Subrist (int start, int end)
3. 설정 소개
세트는 다음과 같이 정의됩니다.
공개 인터페이스 세트 <e> 확장 컬렉션 <e> {} 세트는 컬렉션에서 상속 된 인터페이스입니다. 즉, 세트는 컬렉션 유형이기도합니다. 세트는 중복 요소가없는 컬렉션입니다.
API 정보. Set의 API는 컬렉션과 정확히 동일합니다.
// 세트의 apibstract boolean add (e 객체) 추상 부울 부울 (수집 <? extends e> collection) 초록 void void clear () 초록 부울 함유 (객체 객체) 초록 부울 (컬렉션 <?> 컬렉션) 초록 부울 평등 (개체 객체) 초록 int hashcode () 추상 부울 isempty () 추상적 인 대안 () boolean boolean remel remog () removeall (Collection <?> Collection) Abstract Boolean retainall (Collection <?> Collection) Abstract int size () Abstract <T> T [] TOARRAY (T [] ARRAY) Abstract Object [] toArray ()
4. 추상화
AbstractCollection의 정의는 다음과 같습니다.
공개 초록 클래스 AbstractCollection <e>는 컬렉션 <e> {}를 구현합니다. AbstractCollection은 iterator () 및 size ()를 제외한 컬렉션의 기능을 구현하는 추상 클래스입니다.
AbstractCollection의 주요 기능 : 컬렉션 인터페이스에서 대부분의 기능을 구현합니다. 이로 인해 Arraylist, LinkedList 등과 같은 컬렉션을 구현할 다른 클래스가 용이 해집니다. 이러한 클래스가 컬렉션 인터페이스를 구현하려면 대부분의 인터페이스가 AbstractCollection을 상속하여 구현되었습니다.
5. AbstractList
AbstractList의 정의는 다음과 같습니다.
public acpract class actractlist <e> 확장 actractCollection <e> 구현 목록 <e> {} AbstractList는 AbstractCollection에서 상속하고 목록 인터페이스를 구현하는 추상 클래스입니다. size () 및 get (int location)을 제외한 목록에서 함수를 구현합니다.
AbstractList의 주요 함수 : 목록 인터페이스에서 대부분의 기능을 구현합니다. 이것은 다른 클래스를 용이하게하여 목록을 상속합니다.
또한 AbstractCollection과 비교하여 iterator () 인터페이스는 AbstractList Abstract 클래스에서 구현됩니다.
6. AbstractSet
AbstractSet의 정의는 다음과 같습니다. public acbost class Abstractset <e>은 AbstractCollection <e> 구현 세트 <e> {}을 확장합니다. AbstractSet은 AbstractCollection에서 상속되고 세트 인터페이스를 구현하는 추상 클래스입니다. 컬렉션 인터페이스의 세트 인터페이스와 API는 정확히 동일하기 때문에 세트에는 별도의 API가 없습니다. AbstractCollection과 마찬가지로 iterator () 및 size ()를 제외한 목록의 함수를 구현합니다.
AbstractSet의 주요 함수 : 세트 인터페이스에서 대부분의 기능을 구현합니다. 이는 다른 클래스를 용이하게하여 설정된 인터페이스를 구현합니다.
7. 반복자
반복자의 정의는 다음과 같습니다.
공개 인터페이스 반복자 <e> {} 반복자는 컬렉션의 반복자 인 인터페이스입니다. 컬렉션은 반복자를 통해 컬렉션의 요소를 통해 통과 할 수 있습니다. 반복자가 제공하는 API 인터페이스에는 다음이 포함됩니다. 다음 요소가 존재하는지 여부, 다음 요소를 얻고 현재 요소를 삭제합니다.
참고 : 반복자가 컬렉션을 가로 지르면 실패한 메커니즘을 기반으로합니다. 즉, 특정 스레드 A가 반복자를 통해 세트를 통과 할 때 세트의 내용이 다른 스레드에 의해 변경되는 경우; 그런 다음 스레드 a가 세트에 액세스하면 동시 모듈 식 소식 예외가 발생하여 실패한 이벤트가 발생합니다. FAIN-FAST의 자세한 내용과 관련하여, 우리는 고정 된 요약 후에 구체적으로 설명 할 것입니다.
// iterator의 apiabstract boolean hasnext () Abstract e next () Abstract void remove ()
8. ListIterator
Listiterator의 정의는 다음과 같습니다.
public interface listiterator <e> 확장 iterator <e> {} Listiterator는 큐 ITERATOR 인 Ierator에서 상속 된 인터페이스입니다. 편리한 목록에 특별히 사용되며, 전방/뒤로 이동할 수 있습니다. 반복자와 비교하여 이전 요소가 존재하는지 여부와 이전 요소를 얻는 것과 같은 API 인터페이스를 추가합니다.
// Listiterator 's API // ITERATOR의 인터페이스에서 상속 된 Boolean Hasnext () Abstract e next () Abstract void void remove () // API 인터페이스 추가 Abstrace Abstract void add (e 객체) 추상 부울 hasprevious () acpled in preveryindex () 초록 void set (e object).