>  기사  >  Java  >  Java 컬렉션 프레임워크 연구 노트

Java 컬렉션 프레임워크 연구 노트

PHPz
PHPz원래의
2017-04-04 10:36:581540검색

Java 컬렉션 클래스는 다양한 개수의 여러 객체를 저장하는 데 사용할 수 있으며 스택, 큐 등과 같은 공통 데이터 구조를 구현할 수 있습니다. 배열과 달리 배열 요소는 기본 유형과 객체 유형을 저장할 수 있는 반면, 컬렉션은 객체(기본적으로 객체 참조변수)만 저장할 수 있습니다. Set, List, Map으로 나누어집니다. 여기서 Set은 순서가 없고 반복 불가능한 집합을 나타내고 List는 순서가 있는 반복 가능한 집합을 나타내고 Map은 순서가 있는 집합을 나타냅니다. 매핑 관계가 있는 컬렉션인 경우 는 맵에서 고유하며 값은 반복 가능합니다. 그 중 Set, List, java5 이후 새로 추가된 Queue queue는 CollectionInterface

에서 파생된 하위 인터페이스로 Set 컬렉션에는 동일한 요소가 포함될 수 없으며, 명백한 내용은 없습니다. 컬렉션 내 개체 간의 순서

HashSet, LinkedHashSet 및 TreeSet은 Set의 주요 구현 클래스입니다

HashSet은 요소의 순서를 보장할 수 없으며, HashSet은 동기화되지 않으며, HashSet 세트 요소는 허용됩니다. null이 되도록, 객체가 HashSet에 저장되면 HashSet은 객체의 hashCode 메서드를 호출하여 객체의 hashCode 값을 얻고, HashSet 기반에서 객체의 저장 위치를 ​​결정합니다. hashCode 값에 대해. HashSet에서는 equals()와 hashCode() 메서드의 반환 값을 비교하여 두 개체가 동일한지 여부를 판단합니다.
LinkedHashSet은 HashSet의 하위 클래스이지만 연결 목록을 사용하여 유지하기도 합니다. 요소의 삽입 순서를 유지해야 하기 때문에 여전히 동일한 요소인 HashSet에 비해 성능이 약간 떨어집니다.

TreeSet

TreeSet은 SortedSet 인터페이스의 구현 클래스입니다. 마찬가지로 TreeSet은 컬렉션 요소가 TreeSet이 호출하는 정렬된 상태인지 확인할 수 있습니다. 컬렉션 요소의 comparTo(Object obj) 메소드를 사용하여 요소 간의 크기 관계를 비교한 후 컬렉션을 설정합니다. 요소는 오름차순, 즉 자연 정렬로 정렬됩니다. TreeSet은 또한 Comparator 인터페이스를 통해 사용자 정의 정렬을 구현할 수 있습니다. TreeSet 컬렉션 개체를 생성할 때 TreeSet 컬렉션과 연결되도록 Comparator 개체가 제공되며 Comparator 개체는 컬렉션 요소의 정렬 논리를 담당합니다.

다양한 Set 성능 비교

TreeSet은 Set 요소의 순서를 유지하기 위해 추가 알고리즘이 필요하기 때문에 Set이 필요할 때만 사용해야 하기 때문에 HashSet의 성능은 항상 TreeSet보다 좋습니다. 그렇지 않으면 HashSet을 사용해야 합니다. 또한 LinkedHashSet은 HashSet의 하위 클래스로 일반적인 삽입 및 삭제

작업에 해당합니다. LinkedHashSet의 성능은 HashSet에 비해 약간 느리지만, 이는 연결 목록을 유지하는 데 따른 오버헤드 때문입니다. 연결된 목록으로 인해 LinkedHashSet을 순회할 때 속도가 더 빨라집니다. 그러나 set의 세 가지 구현 클래스 중 어느 것도 스레드안전하지 않습니다. 일반적으로 컬렉션 도구 클래스의 synchronizedSortedSet 메서드를 사용하여 집합 컬렉션을 래핑할 수 있습니다. 예: SortedSet s = Collections.synchronizedSortedSet(<a href="http://www.php.cn/wiki/165.html" target="_blank">new</a> TreeSet(.. .));

List 컬렉션은 순서가 지정되고 반복 가능한 컬렉션을 나타냅니다. 컬렉션의 요소에는 해당 인덱스

Array가 있습니다. 대표적인 두 가지가 있습니다. ArrayList 및 Vector 클래스가 요소 수가 추가될 때 재할당을 허용하는 동적 Object[] 배열을 캡슐화하는 LinkedList

구현 배열 길이가 초과되면 초기 길이가 자동으로 늘어납니다. ArrayList와 Vector의 중요한 차이점은 ArrayList는 스레드로부터 안전하지 않은 반면 Vector는 스레드로부터 안전하며 컬렉션 동기화를 보장하는 프로그램이 필요하지 않다는 것입니다. Vector는 스레드로부터 안전하기 때문에 Vector 색상 성능이 ArrayList보다 낮습니다. 스레드 안전성이 보장되어야 하는 경우에도 일반적으로 Vector를 사용하지 않는 것이 좋습니다. 대신 Collections 도구 클래스의 관련 메서드를 사용하여 ArrayList를 스레드로부터 안전한 클래스로 래핑합니다.
Vector에는 스택의 데이터 구조를 시뮬레이션하는 데 사용되는 Stack이라는 하위 클래스도 있습니다. 이는 상속 관계이므로 Stack도 스레드로부터 안전합니다. 성능이 상대적으로 좋지 않습니다. 스택과 같은 데이터 구조를 사용해야 하는 경우에는 LinkedList를 사용하는 것이 좋습니다.
LinkedList도 List의 구현 클래스입니다. . 컬렉션의 요소에 대한 순차적 액세스, 특히 요소 삭제에 최적화되어 있습니다. LinkedList는 Deque 인터페이스를 구현하므로 스택으로 사용할 수 있습니다. Queue 컬렉션은 큐의 데이터 구조(선입, 후출)를 시뮬레이션하는 데 사용됩니다. Deque는 큐의 하위 인터페이스로, 큐의 요소를 양쪽 끝에서 조작할 수 있도록 하는 이중 끝형 큐를 나타냅니다.

LinkedList와 ArrayList의 차이점

ArrayList는 내부적으로 컬렉션의 요소를 배열 형태로 저장하기 때문에 컬렉션 요소에 무작위로 접근할 때 성능이 더 좋은 반면 LinkedList는 연결리스트의 경우 컬렉션의 요소를 저장하는 데 사용되므로 랜덤 액세스 성능은 좋지 않지만 요소 삽입 및 삭제 성능은 매우 좋습니다.

맵은 매핑 관계를 통해 데이터를 저장하는 데 사용됩니다. 키와 값 모두 모든 참조 유형의 데이터가 될 수 있지만 맵의 키 값은 고유하며 반복될 수 없습니다.

HashMap과 Hashtable은 Maps Two 구현 클래스

Hashtable은 스레드로부터 안전한 Map 구현 클래스이지만 HashMap은 스레드로부터 안전하지 않으므로 HashMap의 성능이 약간 더 좋습니다.
또한 Hashtable은 null을 키와 값으로 사용하는 것을 허용하지 않습니다. Hashtable에 null을 넣으려고 하면 null 포인터 예외가 발생하지만 HashMap은 키와 값을 반복할 수 없으므로 null을 사용할 수 있습니다. null인 키는 하나만 있습니다. 그러나 null인 값은 여러 개 있을 수 있습니다.
HashMap과 Hashtable에서 두 키의 동일성을 판단하는 기준은 equals()와 hashCode() 메소드를 통해 두 키의 반환값이 같은지 여부입니다.
LinkedHashMap은 HashMap의 하위 클래스입니다. LinkedHashMap은 또한 이중 연결 목록을 사용하여 키 순서를 유지합니다. 즉, 반복 순서가 삽입 순서와 일치합니다. 요소의 삽입 순서를 유지해야 하기 때문에 전반적인 성능은 HashMap에 비해 약간 낮습니다.

TreeMap

Map 아래에는 SortedMap 인터페이스도 있습니다. SortedMap 인터페이스는 TreeMap이 키-값 쌍을 저장할 때 키에 따라 노드를 정렬해야 합니다. 자연 정렬과 사용자 정의 정렬로 구분됩니다. 자연 정렬에서는 키가 Comparable 인터페이스를 구현해야 합니다. 예약 정렬에서는 TreeMap을 생성할 때 Comparator 개체가 전달되어야 하며 이 개체는 TreeMap의 키를 정렬합니다. 트리세트와 유사합니다. TreeMap은 순서를 유지해야 하기 때문에 HashMap 및 Hashtable보다 느립니다.

컬렉션과 컬렉션의 차이점

컬렉션은 Java 컬렉션프레임워크
컬렉션은 컬렉션 프레임워크의 도구 클래스로, 많은 수의 컬렉션을 제공합니다. 컬렉션 요소 정렬, 쿼리 수정 및 기타 작업을 위한 메서드가 제공되며 컬렉션 개체를 불변으로 설정하고 개체 컬렉션의 동기화 제어를 구현하는 몇 가지 메서드도 제공합니다.

위 내용은 Java 컬렉션 프레임워크 연구 노트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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