>  기사  >  类库下载  >  HashSet HashTable 与 TreeSet

HashSet HashTable 与 TreeSet

高洛峰
高洛峰원래의
2016-11-01 15:01:121726검색

HashSet 클래스

HashSet 클래스는 주로 두 집합의 교집합, 합집합, 차이 등 고성능 집합 연산을 위해 설계되었습니다. 세트에는 반복적으로 발생하지 않고 속성의 순서가 없는 요소 세트가 포함됩니다.

HashSet 일부 기능은 다음과 같습니다.

1. HashSet의 값은 반복될 수 없으며 순서도 없습니다.

2. HashSet의 용량은 필요에 따라 자동으로 추가됩니다.

생성자:

HashSet() 기본 동등 비교기는 비어 있는 새 인스턴스를 생성합니다.

HashSet(IEnumerable collection) 지정된 컬렉션의 컬렉션에 있는 데이터를 컬렉션에 복사합니다.

HashSet(IEqualityComparer 비교자) 지정된 같음 비교기를 사용하여 빈 비교를 만듭니다. 새 인스턴스

HashSet(IEnumerable collection,IEqualityComparer 비교자) 지정된 비교자를 사용하여 데이터를 인스턴스화하고 지정된 컬렉션의 요소를 컬렉션에 복사합니다.

HashSet은 특별히 집합 작업을 수행하도록 설계되었기 때문에 HashSet이 제공하는 많은 메서드가 집합 작업과 관련되어 있습니다.

다음은 몇 가지 일반적인 메소드에 대한 소개입니다

멤버 유형 설명

Add 메소드는 지정된 요소를 컬렉션에 추가합니다.

Clear 메소드는 지웁니다. 컬렉션의 All elements in

Contains  메서드는 요소가 HashSet

Exists  메서드에 있는지 확인합니다. HashSet에 지정된 조건과 일치하는 요소가 포함되어 있는지 확인합니다.

ExceptWith  메서드 현재 HashSet

IntersectWith  메서드에서 지정된 컬렉션의 모든 요소를 ​​제거합니다. 이 개체와 지정된 컬렉션에 존재하는 요소만 포함하도록 현재 HashSet 개체를 수정합니다.

IsProperSubsetOf 메서드는 HashSet 개체가 지정된 집합의 실제 하위 집합인지 확인합니다.

IsProperSupersetOf 메서드는 HashSet 개체가 지정된 집합의 실제 상위 집합인지 여부를 확인합니다.

IsSunsetOf  메서드는 확인합니다. 여부 HashSet객체가 지정된 집합의 하위 집합인지 여부

IsSupersetOf  메서드는 HashSet 개체가 지정된 집합의 상위 집합인지 여부를 확인합니다.

Remove   메서드는 지정된 요소를 제거합니다. HashSet 개체에서

RemoveWhere  메서드는 지정된 조건자

SetEquals  메서드가 HashSet

개체에 의해 정의된 조건과 일치하는 HashSet 컬렉션에서 모든 요소를 ​​제거합니다. 지정된 집합에 포함됩니다. 동일한 요소

SynmmetricExceptWith  메서드는 현재 HashSet 개체를 수정하여 개체 또는 지정된 컬렉션에 존재하는 요소만 포함합니다.

TrimExcess  메서드는 개체의 용량을 설정합니다. HashSet 객체에 포함된 실제 요소 수는 가장 가까운 속성 및 구현 값으로 반올림됩니다.

UnionWith  메소드는 객체 자체와 지정된 컬렉션

TreeSet

객체를 수정합니다. >TreeSet은 TreeMap을 기반으로 구현됩니다.

TreeSet은 순서가 지정된 집합입니다. TreeSet의 요소는 오름차순으로 정렬됩니다. 기본값은 TreeSet의 요소가 Comparable 인터페이스를 구현해야 함을 의미합니다. 또는 사용자 정의 비교기가 있습니다.
TreeSet 객체를 생성할 때 Comparator 인터페이스를 구현하는 비교기 객체를 전달할 수 있습니다.

TreeSet과 HashSet의 차이점

1. HashSet은 HashMap을 통해 구현되고, TreeSet은 TreeMap을 통해 구현되지만, Set은 Map 키만 사용합니다

2. Map 키와 Set에는 공통 기능이 있습니다. 즉, TreeMap에는 추가 정렬 기능이 있습니다.

3. HashMap에서는 필요가 없기 때문에 hashCode와 equal()을 사용합니다. 정렬은 위치 지정과 고유성에만 집중하면 됩니다.

a. hashCode는 해시 값을 계산하는 데 사용되며, 해시 값은 해시 테이블 인덱스를 결정하는 데 사용됩니다.

b . 해시 테이블의 인덱스는 연결된 목록을 저장하므로 키 값에 해당하는 항목을 실제로 찾으려면 체인의 각 개체를 비교하는 등식 메서드를 반복해야 합니다.

c. 해시 테이블에 없으면 연결 목록 앞에 항목을 추가하고, 있으면 항목의 값을 바꾸고 이전 값을 반환합니다.

4. , Comparator가 필요합니다. 물론 Comparator를 사용하여 위치를 지정하기도 합니다.

a. 생성 시 결정되지 않은 key.compareTo( 사용 예정) 메서드는 키가 Comparable 인터페이스를 구현해야 합니다.

c. TreeMap은 Tree 데이터 구조를 사용하여 구현되므로 다음을 사용하여 위치 지정을 완료할 수 있습니다. 인터페이스 비교

해시테이블

해시테이블(해시테이블)은 컴퓨터 분야에서 새로운 개념이 아닙니다. 이는 오늘날의 표준으로는 매우 느린 컴퓨터 처리 속도를 높이기 위해 설계되었으며, 많은 데이터 항목을 쿼리할 때 특정 항목을 빠르게 찾을 수 있도록 해줍니다. 최신 머신이 수천 배 더 빠르더라도 해시테이블은 여전히 ​​애플리케이션에서 최고의 성능을 얻는 데 유용한 도구입니다.

Hashtable 및 HashMap 객체를 사용하면 키와 값을 결합하고 put() 메서드를 사용하여 키/값 쌍을 테이블에 입력할 수 있습니다. 그런 다음 get() 메서드를 호출하고 키를 매개변수로 전달하여 값을 가져올 수 있습니다. 키와 값은 두 가지 기본 요구 사항을 충족하는 한 모든 개체가 될 수 있습니다. 키와 값은 객체여야 하기 때문에 Integer(int)와 같은 메소드를 사용하여 기본 유형을 객체로 변환해야 한다는 점에 유의하세요.

특정 클래스의 객체를 키로 사용하기 위해서는 해당 클래스가 equals()와 hashCode()라는 두 가지 메소드를 제공해야 합니다. 이 두 메소드는 java.lang.Object에 있으므로 모든 클래스가 이 두 메소드를 상속할 수 있습니다. 그러나 Object 클래스에서 이 두 메소드를 구현하는 것은 일반적으로 쓸모가 없으므로 일반적으로 이 두 메소드를 직접 오버로드해야 합니다.

Equals() 메서드는 해당 개체를 다른 개체와 비교하여 두 개체가 동일한 정보를 나타내는 경우 true를 반환합니다. 이 방법은 또한 두 개체가 모두 동일한 클래스에 속하는지 확인합니다. Object.equals()는 두 참조 객체가 동일한 객체인 경우 true를 반환합니다. 이는 일반적으로 이 메서드가 적합하지 않은 이유를 설명합니다. 대부분의 경우 필드별로 비교할 수 있는 방법이 필요하므로 동일한 데이터를 나타내는 서로 다른 개체를 동일한 것으로 간주합니다.

HashCode() 메소드는 객체의 내용을 이용하여 해시 함수를 수행하여 int 값을 생성합니다. Hashtable과 HashMap은 이 값을 사용하여 키/값 쌍이 어느 버킷(또는 목록)에 있는지 파악합니다. 해시테이블 성능
해시테이블의 효율성에 영향을 미치는 주요 요인은 테이블에 있는 목록의 평균 길이입니다. 평균 검색 시간은 이 평균 길이와 직결되기 때문입니다. 분명히 평균 길이를 줄이려면 해시 테이블의 목록 수를 늘려야 합니다. 목록 수가 너무 많아서 대부분 또는 모든 목록에 하나의 레코드만 포함되어 있으면 최상의 검색 효율성을 얻을 수 있습니다. 그러나 이는 너무 지나친 것일 수 있습니다. 해시테이블에 데이터 항목보다 훨씬 많은 목록이 있는 경우 이러한 메모리 비용을 들일 필요가 없으며 어떤 경우에는 사람들이 이 접근 방식을 받아들이는 것이 불가능합니다.

ashtable과 HashMap
Hashtable과 HashMap 클래스에는 세 가지 중요한 차이점이 있습니다. 첫 번째 차이점은 주로 역사적인 이유 때문입니다. Hashtable은 이전 Dictionary 클래스를 기반으로 하며 HashMap은 Java 1.2에 도입된 Map 인터페이스의 구현입니다.

아마도 가장 중요한 차이점은 Hashtable의 메서드는 동기식이지만 HashMap의 메서드는 그렇지 않다는 점일 것입니다. 이는 특별한 조치를 취하지 않고도 다중 스레드 애플리케이션에서 Hashtable을 사용할 수 있지만 HashMap에 대한 외부 동기화도 제공해야 함을 의미합니다. 편리한 방법은 스레드로부터 안전한 Map 객체를 생성하고 이를 캡슐화된 객체로 반환하는 Collections 클래스의 정적 syncinizedMap() 메서드를 사용하는 것입니다. 이 객체의 메서드를 사용하면 기본 HashMap에 동기적으로 액세스할 수 있습니다. 그 결과 필요하지 않을 때(예: 단일 스레드 응용 프로그램에서) Hashtable에서 동기화를 중단할 수 없으며 동기화로 인해 많은 처리 오버헤드가 추가됩니다.

세 번째 차이점은 HashMap에서만 테이블 항목의 키나 값으로 null 값을 사용할 수 있다는 점입니다. HashMap에서 단 하나의 레코드만 빈 키가 될 수 있지만 항목 수에는 제한이 없으며 빈 값이 될 수 있습니다. 즉, 테이블에서 검색 키를 찾을 수 없거나 검색 키를 찾았지만 null 값인 경우 get()은 null을 반환합니다. 필요한 경우 containKey() 메서드를 사용하여 두 상황을 구분합니다.


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