>Java >java지도 시간 >두 가지 특수 Java 컨테이너 클래스 List 및 Set 분석

두 가지 특수 Java 컨테이너 클래스 List 및 Set 분석

黄舟
黄舟원래의
2016-12-17 11:12:491584검색

컨테이너 클래스는 프로그래밍 효율성과 프로그래밍 기능을 크게 향상시킬 수 있습니다. Java2에서는 SUN Company의 Joshua Bloch가 모든 컨테이너를 재설계하여 컨테이너 클래스 라이브러리의 기능을 풍부하게 했습니다.

Java2 컨테이너 클래스 라이브러리의 목적은 "객체 저장"이며, 이는 두 가지 범주로 나뉩니다.

컬렉션----독립 요소 집합 , 일반적으로 이러한 요소는 특정 규칙을 따릅니다. List는 요소의 특정 순서를 유지해야 하지만 Set은 중복 요소를 가질 수 없습니다.

맵 ----"키-값 쌍" 개체 집합, 즉 해당 요소는 쌍을 이루는 개체입니다. 가장 일반적인 응용 프로그램은 데이터 사전이며 기타 광범위한 응용 프로그램이 있습니다. 또한 Map은 모든 키로 구성된 Set과 모든 값으로 구성된 Collection 또는 키-값 쌍으로 구성된 Set을 반환할 수 있으며, 다음과 같은 경우에는 배열처럼 다차원 Map을 확장할 수도 있습니다. 맵에 있는 키-값 쌍의 각 "값"은 "그냥 맵일 뿐입니다.

1. 반복자

반복자는 디자인 패턴으로, 개발자가 시퀀스의 기본 구조를 이해할 필요 없이 시퀀스의 객체를 탐색하고 선택할 수 있는 객체입니다. 반복자는 생성 비용이 저렴하기 때문에 종종 "경량" 개체라고 불립니다.

Java의 Iterator 함수는 비교적 간단하며 한 방향으로만 이동할 수 있습니다.

(1) iterator() 메서드를 사용하여 컨테이너에 Iterator를 반환하도록 요청합니다. Iterator의 next() 메서드가 처음 호출되면 시퀀스의 첫 번째 요소를 반환합니다.

(2) next()를 사용하여 시퀀스의 다음 요소를 가져옵니다.

(3) hasNext()를 사용하여 시퀀스에 아직 요소가 있는지 확인합니다.

(4) 반복자가 새로 반환한 요소를 삭제하려면 제거()를 사용합니다.

Iterator는 Java 반복자의 가장 간단한 구현입니다. List용으로 설계된 ListIterator는 List를 두 방향으로 순회할 수 있으며 List에서 요소를 삽입하고 삭제할 수도 있습니다.

2. List의 기능적 방법

List(인터페이스): 순서는 요소의 특정 순서가 유지되도록 보장하는 가장 중요한 기능입니다. List는 Collection에 많은 메소드를 추가하여 List에서 요소를 삽입하고 제거하는 것을 가능하게 합니다(LinkedList에만 권장됨). List는 List를 두 방향으로 탐색하고 List 중간에서 요소를 삽입 및 삭제하는 데 사용할 수 있는 ListIterator를 생성할 수 있습니다.

ArrayList: 배열로 구현된 목록입니다. 요소에 대한 빠른 무작위 액세스를 허용하지만 목록 중간에서 요소를 매우 느리게 삽입하고 제거합니다. ListIterator는 ArrayList를 뒤에서 앞으로 순회하는 데만 사용해야 하며 요소를 삽입하거나 삭제하는 데는 사용하지 않아야 합니다. 이는 LinkedList보다 훨씬 비용이 많이 들기 때문입니다.

LinkedList: 순차 접근이 최적화되었습니다. List 중간에 삽입하고 삭제하는 것은 비용이 많이 들지 않지만, Random 접근은 상대적으로 느립니다(대신 ArrayList를 사용할 수 있습니다). 여기에는 addFirst(), addLast(), getFirst(), getLast(), RemoveFirst(), RemoveLast() 메소드가 있습니다. 이러한 메소드(인터페이스 또는 기본 클래스에 정의되지 않음)를 사용하면 LinkedList를 스택, 대기열 및 양방향 대기열을 사용합니다.

3. Set의 기능적 메서드

Set(인터페이스): Set에 저장된 각 요소는 중복된 요소를 저장하지 않기 때문에 고유해야 합니다. Set에 추가된 객체는 객체의 고유성을 보장하기 위해 equals() 메서드를 정의해야 합니다. Set과 Collection은 인터페이스가 완전히 동일합니다. Set 인터페이스는 요소의 순서가 유지된다는 것을 보장하지 않습니다.

HashSet: 빠른 검색을 위해 설계된 세트입니다. HashSet에 저장된 객체는 hashCode()를 정의해야 합니다.

TreeSet: 순서를 유지하는 Set으로, 하단에 트리 구조가 있습니다. 이를 사용하여 세트에서 순서가 지정된 시퀀스를 추출합니다.

LinkedHashSet: HashSet의 쿼리 속도를 가지며, 내부적으로 연결 리스트를 사용하여 요소의 순서(삽입 순서)를 유지합니다. 따라서 반복자를 사용하여 Set을 순회하면 요소가 삽입된 순서대로 결과가 표시됩니다.

HashSet은 해시 함수를 사용하여 빠른 쿼리를 위해 특별히 설계되었습니다. TreeSet은 레드-블랙 트리 데이터 구조를 사용하여 쿼리 속도를 높이는 반면, 연결된 목록을 사용하면 요소가 삽입 순서대로 저장되는 것처럼 보이도록 요소의 순서를 지정합니다. 자신만의 클래스를 생성할 때 Set은 요소의 저장 순서를 유지해야 하므로 Comparable 인터페이스를 구현하고 CompareTo() 메서드를 정의해야 합니다.

위 내용은 Java의 특수 컨테이너 클래스인 List와 Set에 대한 분석입니다. 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


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