HashSet
HashSet
HashSet
1. HashSet
2. HashSet
생성자:
HashSet() 기본 동등 비교기는 비어 있는 새 인스턴스를 생성합니다.
HashSet(IEnumerable
HashSet(IEqualityComparer
HashSet(IEnumerable
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 메서드는 지정된 조건자
개체에 의해 정의된 조건과 일치하는 HashSet
SynmmetricExceptWith 메서드는 현재 HashSet
TrimExcess 메서드는 개체의 용량을 설정합니다. HashSet
UnionWith 메소드는 객체 자체와 지정된 컬렉션
TreeSet은 순서가 지정된 집합입니다. TreeSet의 요소는 오름차순으로 정렬됩니다. 기본값은 TreeSet의 요소가 Comparable 인터페이스를 구현해야 함을 의미합니다. 또는 사용자 정의 비교기가 있습니다.
TreeSet 객체를 생성할 때 Comparator 인터페이스를 구현하는 비교기 객체를 전달할 수 있습니다.
해시테이블(해시테이블)은 컴퓨터 분야에서 새로운 개념이 아닙니다. 이는 오늘날의 표준으로는 매우 느린 컴퓨터 처리 속도를 높이기 위해 설계되었으며, 많은 데이터 항목을 쿼리할 때 특정 항목을 빠르게 찾을 수 있도록 해줍니다. 최신 머신이 수천 배 더 빠르더라도 해시테이블은 여전히 애플리케이션에서 최고의 성능을 얻는 데 유용한 도구입니다.
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() 메서드를 사용하여 두 상황을 구분합니다.