>  기사  >  Java  >  JAVA 컬렉션 클래스 요약

JAVA 컬렉션 클래스 요약

巴扎黑
巴扎黑원래의
2017-07-20 13:17:111415검색

1. 집합과 배열

배열(기본 데이터 유형을 저장할 수 있음)은 객체를 저장하는 데 사용되는 컨테이너입니다. 그러나 배열의 길이는 고정되어 있어 객체 ​​수를 알 수 없는 경우에는 사용하기에 적합하지 않습니다.

컬렉션(객체만 저장할 수 있고 객체 유형은 다를 수 있음)은 길이가 다양하며 대부분의 상황에서 사용할 수 있습니다.

2. 계층적 관계

그림과 같이 그림에서 실선 테두리는 구현 클래스, 폴리선 테두리는 추상 클래스, 점선 테두리는 인터페이스

컬렉션 인터페이스는 컬렉션 클래스의 루트 인터페이스입니다. Java에는 이 인터페이스에 대한 직접적인 구현 클래스가 없습니다. 그러나 이는 Set과 List라는 두 가지 인터페이스를 생성하도록 상속되었습니다. 세트에는 중복된 요소가 포함될 수 없습니다. 목록은 반복되는 요소를 포함할 수 있고 색인별로 액세스를 제공하는 정렬된 컬렉션입니다.

Map은 Java.util 패키지의 또 다른 인터페이스이며 Collection 인터페이스와 관련이 없으며 서로 독립적이지만 둘 다 컬렉션 클래스의 일부입니다. 맵에는 키-값 쌍이 포함되어 있습니다. 맵에는 중복 키가 포함될 수 없지만 동일한 값이 포함될 수 있습니다.

Iterator, 모든 컬렉션 클래스는 컬렉션의 요소를 순회하기 위한 인터페이스인 Iterator 인터페이스를 구현합니다. 여기에는 주로 다음 세 가지 메서드가 포함됩니다.
1.hasNext() 다음 요소가 있는지 여부.
2.next()는 다음 요소를 반환합니다.
3.remove()는 현재 요소를 삭제합니다.

3. 여러 가지 중요한 인터페이스 및 클래스 소개

1. 목록(순서, 반복 가능)
목록에 저장된 개체는 인덱스에 중점을 두고 있으며 빠른 쿼리를 위한 일련의 인덱스 관련 메서드를 가지고 있습니다. 속도. 목록 모음에 데이터를 삽입하거나 삭제하면 후속 데이터의 이동이 수반되므로 모든 데이터 삽입 및 삭제가 느려집니다.

2. 집합(정렬되지 않음, 반복 불가)
집합에 저장된 개체는 순서가 없으며 반복될 수 없습니다. 집합에 포함된 개체는 특정 방식으로 정렬되지 않고 단순히 집합에 추가됩니다.

3. 맵(키-값 쌍, 고유 키, 고유하지 않은 값)
맵 컬렉션에는 키-값 쌍이 저장되지만 값은 반복될 수 있습니다. 키에 따라 값을 얻습니다. 맵 컬렉션을 순회할 때 먼저 키의 집합 컬렉션을 얻은 다음, 집합 컬렉션을 순회하여 해당 값을 얻습니다.

비교는 다음과 같습니다.

예 HashMap입니다.

4. 순회

클래스 세트에는 다음과 같은 4가지 일반적인 출력 방법이 제공됩니다.

1) Iterator: 반복 출력, 가장 일반적으로 사용되는 출력 방법입니다.

2) ListIterator: Iterator의 하위 인터페이스로, 특별히 List의 내용을 출력하는 데 사용됩니다.

3) foreach 출력: JDK1.5 이후에 제공되는 새로운 기능으로, 배열이나 집합을 출력할 수 있습니다.

4) for 루프

의 코드 예시는 다음과 같습니다.

for의 형식: for (int i=0;i

형식 foreach: for (int i : arr) {...}

반복자의 형태:
Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}

5. ArrayList 및 LinkedList

ArrayList와 LinkedList는 사용법에는 차이가 없지만 기능에는 여전히 차이가 있습니다. LinkedList는 추가 및 삭제가 많지만 쿼리 작업이 거의 없는 상황에서 자주 사용되는 반면 ArrayList는 그 반대입니다.

6. 맵 컬렉션

구현 클래스: HashMap, Hashtable, LinkedHashMap 및 TreeMap

HashMap

HashMap은 키의 HashCode 값에 따라 데이터를 저장하며 그 값은 다음과 같습니다. 키에 따라 직접 획득되며, 접근 속도가 빠르고, 통과 시 데이터 획득 순서가 완전히 무작위입니다. 키 객체는 반복될 수 없기 때문에 HashMap은 하나의 레코드의 키만 최대 Null로 허용하고, 여러 레코드의 값은 Null로 허용합니다.

Hashtable

Hashtable은 HashMap과 유사합니다. HashMap의 스레드 안전 버전은 스레드 동기화를 지원합니다. 즉, 언제든지 하나의 스레드만 Hashtable에 쓸 수 있으며, 이로 인해 Hashtale이 Dictionary 클래스에서 상속되기 때문에 속도가 느려집니다. 동시에 기록된 키나 값이 null이 되는 것을 허용하지 않는 것이 효율적입니다.

ConcurrentHashMap

스레드로부터 안전하고 잠금으로 구분됩니다. ConcurrentHashMap은 내부적으로 세그먼트를 사용하여 이러한 다양한 부분을 나타냅니다. 각 세그먼트는 실제로 작은 해시 테이블이며 자체 잠금을 갖습니다. 여러 수정 작업이 서로 다른 세그먼트에서 발생하는 한 동시에 발생할 수 있습니다.

LinkedHashMap

LinkedHashMap은 Iteraor로 LinkedHashMap을 순회할 때 반드시 먼저 얻은 레코드가 먼저 삽입됩니다. 순회 중에는 HashMap보다 느리며 HashMap의 모든 특성을 갖습니다.

TreeMap

TreeMap은 키에 따라 저장하는 레코드를 정렬할 수 있는 SortMap 인터페이스를 구현합니다. 기본값은 키 값의 오름차순(자연 순서)입니다. 정렬 비교기를 사용하여 지정할 수도 있습니다. TreeMap을 통과하면 얻은 레코드가 정렬됩니다. 키 값은 비동기식일 수 없습니다.

map traversal

첫 번째 유형: KeySet()
Map의 모든 키를 세트 컬렉션에 저장하세요. 세트에는 반복자가 있기 때문입니다. 모든 키는 반복적으로 검색한 다음 get 메서드를 기반으로 검색할 수 있습니다. 각 키에 해당하는 값을 가져옵니다. keySet(): 반복 후에는 get()을 통해서만 키를 얻을 수 있습니다.
데이터 행의 기본 키를 얻을 때 HashMap.keySet() 메서드를 사용하고 이 메서드에서 반환된 Set 결과의 데이터가 순서대로 정렬되어 있으므로 얻은 결과는 순서가 틀립니다.
일반적인 사용법은 다음과 같습니다:
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put(" key3" ,"lisi3");
map.put("key4","lisi4");
//먼저 지도 컬렉션에 있는 모든 키의 집합 컬렉션을 가져옵니다. keyset()
Iterator it = map.keySet() .iterator() ;
//반복자를 가져옵니다
while(it.hasNext()){
Object key = it.next();
System.out.println(map.get(key));
}

두 번째:entrySet()
Set>entrySet() //이 맵에 포함된 매핑 관계의 Set 뷰를 반환합니다. (관계는 키-값 쌍입니다) 즉, (키-값) 전체가 Set 컬렉션에 일대일로 저장됩니다. Map.Entry는 매핑 관계를 나타냅니다. EntrySet(): 반복 후 e.getKey() 및 e.getValue()를 통해 키와 값을 얻을 수 있습니다. 반환되는 것은 Entry 인터페이스입니다.
일반적인 사용법은 다음과 같습니다:
Map map = new HashMap();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put(" key3" ,"lisi3");
map.put("key4","lisi4");
//지도 컬렉션에서 매핑 관계를 꺼내어 집합 컬렉션에 저장합니다
Iterator it = map.entrySet() .iterator() ;
while(it.hasNext()){
Entry e =(Entry) it.next();
System.out.println("Key"+e.getKey () + "값은 " + e.getValue ());
}
두 번째 방법인 EntrySet() 방법을 사용하는 것이 더 효율적입니다.
keySet은 실제로 두 번 순회됩니다. 한 번은 반복자로 변환하고, 한 번은 HashMap에서 키 값을 검색합니다. 엔트리 세트는 처음에만 순회하므로 키와 값을 모두 항목에 넣기 때문에 속도가 더 빠릅니다. 두 순회 간의 순회 시간 차이는 여전히 분명합니다.

7. 주요 구현 클래스

Vector와 ArrayList
1의 차이점 요약 Vector는 스레드 동기식이므로 스레드로부터 안전하지만 arraylist는 스레드 비동기식이므로 안전하지 않습니다. 스레드 안전 요소를 고려하지 않는 경우 일반적으로 arraylist를 사용하는 것이 더 효율적입니다.
2. 컬렉션의 요소 수가 현재 컬렉션 배열의 길이보다 큰 경우 벡터 증가율은 현재 배열 길이의 100%이고 arraylist 증가율은 현재 배열 길이의 50%입니다. 컬렉션에서 상대적으로 많은 양의 데이터를 사용하는 경우 벡터를 사용하면 몇 가지 이점이 있습니다.
3. 특정 위치에서 데이터를 찾는 경우 벡터와 arraylist가 사용하는 시간은 동일합니다. 데이터에 자주 액세스하는 경우 이때는 벡터와 arraylist를 모두 사용할 수 있습니다. 그리고 지정된 위치를 이동하면 이후의 모든 요소가 이동하게 되는 경우, 지정된 위치의 데이터만 이동하고 다른 요소는 이동하지 않으므로 이때 linklist 사용을 고려해야 합니다.
ArrayList와 Vector는 배열을 사용하여 데이터를 저장합니다. 배열 요소의 개수는 실제 저장된 데이터보다 커서 요소를 추가하고 삽입할 수 있습니다. 둘 다 요소의 직접 일련 번호 인덱싱을 허용하지만 데이터를 삽입하려면 배열 이동과 같은 메모리 작업이 필요합니다. Vector는 동기화된 방법(스레드 안전성)을 사용하므로 ArrayList보다 성능이 나쁩니다. LinkedList는 저장을 위해 양방향 연결 목록을 사용합니다. 역방향 순회가 가능하지만, 데이터 삽입 시에는 레코드만 필요합니다. 이 항목의 앞, 뒤 용어만으로도 충분하므로 여러 번 삽입하는 것이 더 빠릅니다.

arraylist 및 linkedlist
1.ArrayList는 동적 배열 기반의 데이터 구조를 구현하고, LinkedList는 연결된 목록 기반의 데이터 구조를 구현합니다.
2. 무작위 액세스를 가져오고 설정하려면 LinkedList가 포인터를 이동해야 하기 때문에 ArrayList가 LinkedList보다 낫습니다.
3. 신규 및 삭제 작업 추가 및 제거의 경우 ArrayList가 데이터를 이동해야 하기 때문에 LinedList가 유리합니다. 이는 실제 상황에 따라 다릅니다. 단일 데이터만 삽입하거나 삭제하는 경우 ArrayList가 LinkedList보다 빠릅니다. 그러나 데이터를 무작위로 일괄적으로 삽입하고 삭제하는 경우 ArrayList에 비해 LinkedList의 속도가 훨씬 빠릅니다. 왜냐하면 ArrayList에 데이터 조각이 삽입될 때마다 삽입 지점과 그 이후의 모든 데이터를 이동해야 하기 때문입니다.

HashMap 및 TreeMap
1. HashMap은 해시코드를 사용하여 콘텐츠를 빠르게 검색하는 반면, TreeMap의 모든 요소는 특정 고정 순서를 유지합니다. 정렬된 결과를 얻으려면 TreeMap을 사용해야 합니다(HashMap에서는 요소의 순서가 그렇지 않습니다.) 결정된).
2. Map에서 요소를 삽입, 삭제 및 찾으려면 HashMap이 최선의 선택입니다. 그러나 자연 순서나 사용자 정의 순서로 키를 반복하려면 TreeMap이 더 좋습니다. HashMap을 사용하려면 추가된 키 클래스가 hashCode() 및 equals() 구현을 명확하게 정의해야 합니다.
두 맵의 요소는 동일하지만 순서가 다르기 때문에 hashCode()가 다릅니다.
동일한 테스트를 수행합니다.
HashMap에서는 동일한 값의 맵이 다른 순서이고 같음은 false입니다.
treeMap에서 동일한 값의 맵은 다른 순서이고 같음은 true입니다. 이는 treeMap이 true임을 나타냅니다. equals( )에 순서가 있습니다.

HashTable 및 HashMap
1. Hashtable은 스레드로부터 안전합니다. 즉, HashMap은 스레드로부터 안전하고 동기적이지 않습니다.
2. HashMap은 하나의 null 키와 여러 개의 null 값을 허용합니다.
3. 해시테이블의 키와 값은 null이 될 수 없습니다.

 

주문 여부

요소 반복 허용 여부

수집

아니요

List

Set

AbstractSet

안돼

안돼

 

HashSet

키-값을 사용하여 데이터를 매핑하고 저장합니다. 키는 고유해야 하며 값은 반복될 수 있습니다.

 

 

TreeMap

은 (이진 정렬 트리 사용)

위 내용은 JAVA 컬렉션 클래스 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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