>  기사  >  Java  >  Java 컬렉션: Set, List, Queue, Map의 네 가지 시스템 요약

Java 컬렉션: Set, List, Queue, Map의 네 가지 시스템 요약

php是最好的语言
php是最好的语言원래의
2018-08-08 10:51:522345검색

Java 컬렉션은 대략 Set, List, Queue, Map의 네 가지 시스템으로 나뉩니다.

그중 Set은 순서가 없고 반복할 수 없는 컬렉션을 나타냅니다. , 반복 컬렉션 맵은 매핑 관계가 있는 컬렉션을 나타냅니다. 큐는 큐의 구현입니다.

컬렉션은 배열과 다릅니다. 배열 요소는 기본 유형 값 또는 객체일 수 있습니다(실제로는 객체의 참조 변수가 저장됩니다). 컬렉션은 객체만 저장할 수 있습니다(실제로는 참조 변수일 뿐입니다). 물체를 보유함).

Java 컬렉션에는 두 개의 파생된 인터페이스가 있습니다: Collection 및 Map
Collection 컬렉션 시스템 상속 트리: #🎜 🎜#

Java 컬렉션: Set, List, Queue, Map의 네 가지 시스템 요약지도 수집 시스템의 상속 트리:
Java 컬렉션: Set, List, Queue, Map의 네 가지 시스템 요약

다음은 별도로 설명합니다

#🎜 🎜#Set 컬렉션:
Set 컬렉션은 jar과 유사합니다. 프로그램은 여러 개체를 순차적으로 "던질" 수 있습니다. Set은 요소가 추가되는 순서를 기억하지 않습니다. 동일한 요소를 허용합니다.

HashSet:

Features: 요소의 순서를 보장할 수 없습니다
HashSet이 동기화되지 않습니다
설정된 요소 value can은 null입니다.

HashSet의 두 요소가 같은지 판단하는 기준은 다음과 같습니다.
두 개체는 equals() 메서드를 통해 동일한지 비교되며, ​​​​의 반환 값 두 개체의 hashcode() 메서드도 동일합니다. 참고: 객체를 HashSet에 넣을 때 객체의 equals() 메서드를 재정의해야 하는 경우 해당 hashCode() 메서드를 재정의해야 합니다. 규칙은 두 객체를 비교하여 equals() 메서드를 통해 true를 반환하면 두 객체의 hashCode 값이 동일해야 한다는 것입니다.

LinkedSet:

LinkedSet은 원래 hashCode 값을 기반으로 요소의 저장 위치를 ​​결정하지만 연결된 목록을 사용하여 order of elements# 🎜🎜#, 요소의 삽입 순서가 유지됩니다. LinkedSet은 추가된 순서대로 세트의 요소에 액세스합니다.
LinkedSet에서는 요소의 삽입 위치를 유지해야 하므로 HashSet에 비해 성능이 약간 저하됩니다.
TreeSet:

TreeSet은 컬렉션 요소가 정렬된 상태인지 확인합니다. TreeSet은 요소의 삽입 순서에 따라 정렬되지 않고 요소의 실제 값에 따라 정렬됩니다. TreeSet은 레드-블랙 트리 데이터 구조를 사용하여 집합 요소를 저장합니다.
TreeSet은 자연 정렬과 사용자 정의 정렬이라는 두 가지 정렬 방법을 지원합니다. 기본적으로 TreeSet은 자연 순서를 사용합니다.

자연 정렬: TreeSet은 컬렉션 요소의 CompareTo(Object obj) 메서드를 호출하여 요소 간의 크기 관계를 비교한 다음 컬렉션 요소를 오름차순으로 정렬합니다. 기본적으로 TreeSet은 자연 순서를 사용합니다.
TreeSet 컬렉션에 개체가 추가되면 TreeSet은 개체의 CompareTo(Object obj) 메서드를 호출하여 컨테이너에 있는 다른 개체와 크기를 비교한 다음 레드-블랙 트리에 따라 저장 위치를 ​​찾습니다. 구조.

두 객체가 동일한지 여부를 판단하는 유일한 기준은
CompareTo(Object obj) 메서드로 비교할 때 두 객체가 0을 반환하는지 여부입니다.
두 객체를 비교하고 equals() 메서드를 통해 true를 반환하면 CompareTo(Object obj) 메서드를 통해 두 객체를 비교하면 0이 반환되어야 합니다. 사용자 정의 정렬: 사용자 정의 정렬을 구현해야 하는 경우 TreeSet 컬렉션 개체를 생성할 때 TreeSet 컬렉션과 연결된 Comparator 개체를 제공해야 합니다. 수집 요소.

EnumSet:

EnumSet의 컬렉션 요소도 Enum 내의 열거 값 위치 순서에 따라 컬렉션 요소의 순서를 결정합니다. 수업. EnumSet은 내부적으로 비트 벡터 형태로 저장됩니다. EnumSet 컬렉션은 null 요소 추가를 허용하지 않습니다.


각 Set 구현 클래스의 성능 분석:

HashSet의 성능은 항상 TreeSet보다 우수합니다. 세트순서 . LinkedSet 일반적인 삽입 및 삭제 작업의 경우 LinkedSet은 HashSet보다 약간 느립니다. 이는 연결 목록을 유지하는 데 따른 추가 오버헤드로 인해 발생합니다. 그러나 연결된 목록으로 인해 LinkedSet을 순회하는 것이 더 빠릅니다. EnumSet은 성능이 가장 좋지만 동일한 열거 클래스의 열거 값만 집합 요소로 저장할 수 있습니다.


List:

List는 순서 있고 반복 가능한 요소 조합을 나타내며 세트의 각 요소에는 해당 시퀀스가 ​​있습니다. 색인. List 컬렉션은 위치 인덱스를 기반으로 컬렉션의 요소에 액세스할 수 있으므로 for 루프를 사용하여 List를 탐색할 수 있습니다.

ArrayList, LinkedList 및 Vector

ArrayList 소스 코드 분석: LinkedList 소스 코드 분석:
#🎜🎜 #Queue :

Queue는 큐의 데이터 구조를 시뮬레이션하는 데 사용됩니다.

PriorityQueue: PriorityQueue는 추가된 순서가 아닌 대기열 요소의 크기에 따른 순서대로 대기열 요소를 저장합니다. PriorityQueue에서는 null 요소 삽입을 허용하지 않습니다.

Deque:
Deque 인터페이스는 Queue 인터페이스의 하위 인터페이스로, 이중 종료 대기열을 나타냅니다.
프로그램에서 "스택"과 같은 데이터 구조를 사용해야 하는 경우 ArrayDeque를 사용하는 것이 좋습니다.

다양한 선형 테이블의 성능 분석:
1. List 컬렉션 요소를 순회해야 하는 경우 ArrayList 및 Vector 컬렉션의 경우 무작위 액세스 방법(get)을 사용하여 컬렉션 요소를 순회해야 성능이 향상됩니다. ; LinkedList 컬렉션의 경우 컬렉션 요소를 탐색하려면 Iterator를 사용해야 합니다.
2. 자주 삽입과 삭제를 수행해야 하는 경우에는 LinkedList를 사용해야 합니다.
3. 여러 스레드가 동시에 List 컬렉션의 요소에 액세스하는 경우 컬렉션을 사용하여 컬렉션을 스레드로부터 안전한 컬렉션으로 래핑해야 합니다.

Map:
Map 키는 반복될 수 없습니다. 즉, 동일한 Map 개체의 두 키는 equals 메서드와 비교할 때 항상 false를 반환합니다.
Map에는 Map의 모든 키로 구성된 Set을 반환하는 데 사용되는 keySet() 메서드가 있습니다.

HashMap, Hashtable:
HashMap과 Hashtable의 차이점:
1. Hashtable은 스레드로부터 안전한 맵이고 HashMap은 스레드로부터 안전하지 않으므로 HashMap의 성능이 더 좋습니다.
2.Hashtable은 키와 값으로 null 사용을 허용하지 않으며, HashMap은 키나 값으로 null 사용을 허용합니다.

Hashtable과 HashMap에서 두 키의 동등성을 판단하는 기준은 두 키의 equals() 메서드가 true를 반환하고 두 키의 HashCode 값이 동일하다는 판단 기준입니다. 두 값은 동일한 값의 equals() 메소드의 반환 값입니다.

LinkedMap:
LinkedMap은 키-값이 추가되는 순서를 기억합니다.

TreeMap:
TreeMap도 Red-Black 트리 구조를 사용합니다. TreeMap에서 두 키의 동등성을 판단하는 기준은 다음과 같습니다.
CompareTo() 메서드를 통해 두 키의 반환 값은 0입니다. (자연 정렬에서) )
CompareTo() 메서드를 통해 두 키의 반환 값은 0입니다. 동시에 equals() 메서드는 true를 반환합니다. (사용자 정의 정렬 중).

EnumMap:
EnumMap은 내부적으로 배열 형태로 저장됩니다.
EnumMap은 null을 키로 허용하지 않지만 값이 null이 되도록 허용합니다.

Map 성능 분석:
HashMap의 성능이 Hashtable보다 좋습니다.
TreeMap의 키-값 쌍은 항상 순서대로 정렬되며 특별한 정렬 작업이 필요하지 않습니다.
일반 애플리케이션 시나리오의 경우 HashMap 사용을 고려해 보세요.
LinkedMap은 키-값 추가 순서를 유지하기 위해 연결 목록을 유지해야 하기 때문에 HashMap보다 느립니다.
EnumMap은 성능이 가장 좋지만 키와 동일한 열거 클래스의 열거 값만 사용할 수 있습니다.

관련 권장 사항:

Java 컬렉션 Set, List 및 Map의 탐색 메서드

Java에서 List, Set 컬렉션 및 Map의 사용을 이해하기 위한 코드

위 내용은 Java 컬렉션: Set, List, Queue, Map의 네 가지 시스템 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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