Java Collection API는 객체 컬렉션을 저장하고 관리하는 데 도움이되는 일부 열 클래스 및 인터페이스를 제공합니다. 실제로 Java의 컬렉션은 배열처럼 작동하지만 컬렉션의 크기는 동적으로 변경 될 수 있으며 컬렉션도 더 고급 기능을 제공합니다. Javacollection API를 사용하면 컬렉션 클래스를 스스로 작성할 필요가 없습니다. 대부분의 Java Collection 클래스는 java.util 패키지에 있으며 동시성 관련 컬렉션 클래스는 java.util.concurrent 패키지에 있습니다. 다음은 Java API가 제공하는 컬렉션 클래스입니다.
1. Java 컬렉션의 개요
Java에는 두 가지 범주의 컬렉션이 있습니다.
1. 컬렉션
2.지도
컬렉션 클래스의 컬렉션은 주로 단일 객체를 저장하는 것으로 이해 될 수 있으며,지도 클래스의 컬렉션은 주로 주요 값 객체를 저장합니다. 이 두 범주는 두 개의 인터페이스, 즉 Collection接口및 Map接口에 해당하도록 당연한 것으로 간주 할 수 있습니다. 다음 그림에는이 두 인터페이스의 상속 트리가 나와 있습니다.
위 그림에서 컬렉션 인터페이스가 세 가지 지점, 즉 다음을 도출했음을 알 수 있습니다.
1. 목록
2. 세트
3. 대기열
맵은 하나의 지점 만있는 비교적 간단합니다. 아래는 Java 컬렉션의 각 구현 클래스를 자세히 소개합니다.
참고 : 수집 및 컬렉션을 구별하기 위해 컬렉션은 컬렉션의 인터페이스이며 컬렉션은 도구 클래스로, java.util 인스턴스를 작동시키는 데 도움이되는 정적 메소드를 제공합니다.
2. 먼저 컬렉션 인터페이스에서 소개합니다
다음 그림은 컬렉션 인터페이스의 소스 코드의 스크린 샷입니다. 인터페이스의 추상 방법에서 일반 컬렉션의 공통 방법을 정의합니다.
- 요소를 추가하고 삭제하십시오
- 요소가 존재하는지 확인하십시오
- 컬렉션의 크기를 얻으십시오
- 컬렉션을 반복하십시오
2.1 컬렉션의 목록 인터페이스
목록 인터페이스는 컬렉션 인터페이스에서 상속됩니다. 그 특성은 그 객체가 순서 대상이고 각 객체에는 고유 한 인덱스가 있다는 것입니다. 이 색인을 통해 요소를 검색 할 수 있으며 목록의 객체를 반복 할 수 있으며 이는 배열과 유사합니다. 목록 인터페이스의 경우 Java API는 다음과 같은 구현을 제공합니다.
-java.util.arraylist
-java.util.linkedList
-java.util.vector
-java.util.stack
물론 java.util.concurrent 패키지에는 일부 구현이 있으며 다른 기사에 자세히 설명됩니다.
ArrayList는 가장 일반적으로 사용되는 컬렉션 이며 내부 구현은 배열이며 ArrayList의 크기는 동적으로 확장 될 수 있습니다. 요소에 대한 랜덤 액세스 효율은 높고 액세스의 시간 복잡성은 O(1) 입니다. 꼬리의 작동 효율은 높고 시간 복잡성은 무작위 액세스와 마찬가지로 O(1) 입니다. 헤드에서 작동하는 경우, 헤드에서 삽입 또는 삭제할 때 다음 모든 요소를 움직여야하고 시간 복잡성은 O(ni) 이기 때문에 효율은 상대적으로 낮습니다.
LinkList : 위 그림에서 볼 수 있듯이 List 인터페이스를 상속 할뿐만 아니라 Deque 인터페이스를 상속합니다 (나중에 소개됩니다). LinkList는 링크 된 목록을 기반으로 한 데이터 구조이며 각 노드는 포인터를 이전 및 다음 노드에 저장합니다. LinkList는 처음부터 인덱싱이 필요하기 때문에 임의의 액세스에 대해 상대적으로 비효율적이므로 시간 복잡성은 O(i) 입니다. 그러나 요소의 추가 및 삭제의 경우 전면 및 후면 포인터 만 수정해야하며 시간 복잡성이 O(1) 이기 때문에 LinkList는 효율적입니다.
벡터 : 벡터 및 ArrayList 소스 코드의 스크린 샷에서 인터페이스를 정확히 상속합니다. 따라서 벡터는 스레드-안전 배열리스트로 간주 될 수 있으며, 배열을 기반으로 구현되지만 거의 모든 수집 작업은 synchronized 키워드와 함께 추가됩니다.
스택 : 위의 것은 스택 클래스 소스 코드의 스크린 샷입니다. 스택 클래스는 실제로 벡터에서 상속됩니다. 스택은 스택의 특성을 제공하기 위해 벡터를 기반으로 여러 가지 방법을 추가합니다 (First Out Lifo). Stack의 기능은 추가되면 새로운 요소가 상단에 추가되고 제거되면 상단 요소가 먼저 제거된다는 것입니다. 이 데이터 구조는 주로 언어 컴파일, XML 파싱 등과 같은 일부 특수 데이터 처리 프로세스로 사용됩니다.
2.2 수집 세트 인터페이스
Set and List Interface도 Collection 인터페이스에서 상속되며 컬렉션 구현이기도합니다. 그들 사이의 가장 큰 차이점은 세트의 객체를 반복 할 수 없다는 것입니다. Set 인터페이스의 경우 Java API는 다음과 같은 구현을 제공합니다.
-java.util.enumset
-java.util.hashset
-java.util.linkedhashset
-java.util.treeset
이 클래스의 기능은 약간 다르며 차이는 주로 객체 반복 순서와 삽입 및 검색의 효율에 반영됩니다.
해시 세트의 구현은 매우 간단하며 내부 HashMap 이지만 요소의 순서를 보장하지는 않습니다.
LinkedHashset의 구현도 매우 간단하며 내부적으로 LinkedHashMap 사용합니다. LinkedHashMap 순서를 유지하기 위해 내부적으로 양방향 링크 목록을 유지하기 때문에 LinkedHashSet 의 특성은 요소가 순서 대상이며 요소 반복 순서는 삽입 순서라는 것입니다. 요소의 재 삽입은 원래 요소의 순서에 영향을 미치지 않습니다.
Treeset : 위 그림의 상속 관계에서 먼저 NavigableSet TreeSet SortedSet 인터페이스를 이해해야합니다.
SortedSet 인터페이스
public interface sortedset <e>는 set <e> {비교기 <? 슈퍼 e> 비교기 (); SortedSet <e> 서브 세트 (E ourlement, e 토정); SortedSet <E> 헤드셋 (E 토정); SortedSet <E> 테일셋 (e fromElement); e 첫 번째 (); } 위의 인터페이스 정의에서 SortedSet 인터페이스는 세트의 하위 인터페이스입니다. 일반적인 세트 특성 외에도 그 요소는 내부적으로 주문됩니다. 내부 요소의 순서는 요소의 순서 규칙에 따라 달라집니다. 즉, 요소의 순서는 요소의 comparable 인터페이스 또는 비교기 comparator 의 구현에 따라 다릅니다. 비교 가능하고 비교기의 차이점은 다음을 참조하십시오. https://www.vevb.com/article/93973.htm
NaviGableset 인터페이스
public interface naviagableset <e>는 SortedSet <e>를 확장합니다. 반복자 <e> descendingiterator (); SortedSet <E> 헤드셋 (E 토정); SortedSet <E> 테일셋 (e fromElement); SortedSet <e> 서브 세트 (E ourlement, e 토정); Ceiling (), Floor (), Higher () 및 Lower () ...}
NaviGablesET 인터페이스 정의에서 SortedSet의 하위 인터페이스이며 일부 탐색 방법을 제공합니다. 이러한 내비게이션 방법의 의미는 Java Doc을 확인할 수 있습니다.
따라서 TreeSet의 특징은 내부 요소가 주문되고 구현할 수있는 많은 탐색 방법이 있다는 것입니다. Java Collection 클래스 개요의 첫 번째 부분에서 Set은 하위 인터페이스 SortedSet 이 있으며 SortedSet에는 하위 인터페이스 NavigableSet 인터페이스가 있습니다. Java API는 TreeSet 인 SortedSet 및 NaviGableSet 인터페이스 만 구현합니다.
2.3 컬렉션의 큐 인터페이스
큐 인터페이스는 Collection 인터페이스에서 상속되며, 이는 순서 대기열을 나타냅니다. 그러나이 대기열의 가장 큰 특징은 새로 삽입 된 요소가 큐의 꼬리에 위치하고 제거 된 객체는 큐의 헤드에 위치하며 슈퍼마켓에서 체크 아웃하는 큐와 유사하다는 것입니다.
우리는 이미 섹션 1의 Java Collection 개요 에서 큐 인터페이스에도 서브 인터페이스 Deque가 있음을 알고 있습니다. Java API 의이 두 인터페이스의 정의를 살펴 보겠습니다.
큐 인터페이스 :
공개 인터페이스 큐 <e>는 Collection <e> {boolean add (e e)를 확장합니다. 부울 제안 (e e); e 제거 (); e poll (); e peek ();}Deque 인터페이스 :
public interface deque <e>는 큐 <e> {void addfirst (e e)를 확장합니다. void addlast (e e); e removeFirst (); e removeFirst ();}이 두 인터페이스의 정의에서, 나는 모든 사람들이 몇 가지 단서를 보았다고 생각합니다. 큐 인터페이스는 일반 대기열의 작동 방법을 정의하고 Deque는 이중 엔드 큐 입니다.
Queue 인터페이스의 경우 Java API는 두 가지 구현을 제공합니다.
-java.util.linkedList (Deque 인터페이스도 구현)
-java.util.priorityqueue
LinkedList : 이전 목록 장에서는 그것이 표준 대기열이라고 언급했습니다.
PriorityQueue : 대기열의 순서는 요소의 순서 규칙, 즉 비교 가능한 인터페이스 또는 비교기 비교기에 대한 요소를 구현하는 것과 유사합니다.
Deque 인터페이스의 경우 LinkList 클래스 외에 다른 구현이 있습니다.
-java.util.arraydeque
ArrayDeque : 이름에서 볼 수 있듯이 내부 구현은 배열입니다.
3. Java 컬렉션 맵
Java Collection 클래스 개요의 첫 번째 부분에서 MAP는 컬렉션 인터페이스에서 상속되지 않지만 컬렉션 인터페이스와 병렬 위치에 있음을 알고 있습니다. 따라서지도의 동작은 위에서 소개 된 컬렉션의 동작과 매우 다릅니다. 맵의 주요 특징은 저장소 요소 key-value 쌍이라는 것입니다. 맵 인터페이스의 정의를 살펴 보겠습니다.
공개 인터페이스 맵 <k, v> {v put (k key, v value); 부울은 키 (객체 키)를 포함합니다. set <map.entry <k, v >> entryset (); int hashcode (); v get (Object Key); set <k> keyset (); ...}MAP 인터페이스의 경우 Java API는 다음과 같은 구현을 제공합니다.
-java.util.hashmap
-java.util.hashtable
-java.util.enummap
-java.util.IdentityHashMap
-java.util.linkedhashmap
-java.util.properties
-java.util.treemap
-java.util.weakhashmap
그중에서 가장 일반적으로 사용되는 것은 해시 맵과 트리 맵입니다.
해시 맵의 핵심과 가치는 모두 무질서합니다. 해시 맵의 내부 구현은 공부할 가치가 있습니다. 자세한 내용은 해시 맵의 내부 구현을 참조하십시오.
Hashtable은 해시 맵의 헤비급 구현으로 간주 될 수 있습니다. 대부분의 메소드는 스레드-안전한 동기화 된 키워드와 함께 추가됩니다. HashTable 과 Hashmap의 또 다른 차이점은 Hashmap의 key-value 모두 무효화되지만 HashTable不것입니다.
LinkedHashMap은 또한 해시 맵이지만 순서를 유지하기 위해 내부적으로 양방향 링크 목록이 유지됩니다. LinkedHashSet 내부 구현은 LinkedHashMap을 사용하는 데 사용됩니다.
Treemap의 핵심과 가치는 순서를 유지할 수있을뿐만 아니라 TreeSet 및 PriorityQueue 와 유사합니다. Treemap의 키와 가치의 반복 순서는 해당 정렬 규칙에 따라 다릅니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.