System.Collections.Hashtable 클래스 및 System.Collections.Generic.Dictionary<TKey,TValue>System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> 제네릭 클래스는 인터페이스를 구현합니다System.Collections.IDictionary. 제네릭 클래스는 Dictionary<TKey,TValue> 제네릭 인터페이스도 구현합니다 IDictionary<TKey,TValue> . 따라서 이러한 컬렉션의 각 요소는 키 및 값 쌍입니다.
개체는 Hashtable 컬렉션의 요소를 포함하는 버킷으로 구성됩니다. 버킷은 대부분의 컬렉션보다 더 쉽고 빠르게 검색할 수 있는 요소 Hashtable의 가상 하위 그룹입니다. 각 버킷은 해시 함수를 사용하여 생성되고 요소의 키를 기반으로 하는 해시 코드와 연결됩니다.
제네릭 HashSet<T> 클래스는 고유 요소를 포함하는 순서가 지정되지 않은 컬렉션입니다.
해시 함수는 키를 기반으로 숫자 해시 코드를 반환하는 알고리즘입니다. 키는 저장되는 개체의 일부 속성 값입니다. 해시 함수는 항상 동일한 키에 대해 동일한 해시 코드를 반환해야 합니다. 해시 함수는 서로 다른 두 키에 대해 동일한 해시 코드를 생성할 수 있지만, 각 고유 키에 대해 고유한 해시 코드를 생성하는 해시 함수는 해시 테이블에서 요소를 검색할 때 성능이 향상됩니다.
요소 Hashtable 로 사용되는 각 개체는 메서드의 GetHashCode 구현을 사용하여 자체에 대한 해시 코드를 생성할 수 있어야 합니다. 그러나 Hashtable의 모든 요소에 대해 해시 함수를 지정하려면 Hashtable 구현을 매개변수 중 하나로 받는 IHashCodeProvider 생성자를 또한 사용할 수 있습니다.
개체가 Hashtable에 추가되면, 해당 개체의 해시 코드와 일치하는 해시 코드에 연결된 버킷에 저장됩니다. 값을 검색할 때 해당 값에 대한 Hashtable해시 코드가 생성되고 해당 해시 코드와 연결된 버킷이 검색됩니다.
예를 들어 문자열에 대한 해시 함수는 문자열에 있는 각 문자의 ASCII 코드를 가져와 해시 코드를 생성하기 위해 함께 추가할 수 있습니다. 문자열 "picnic"에는 문자열 "basket"의 해시 코드와 다른 해시 코드가 있습니다. 따라서 문자열 "피크닉"과 "바구니"는 다른 버킷에 있을 것입니다. 반면, "스트레스"와 "디저트"는 동일한 해시 코드를 가지며 동일한 버킷에 있습니다.
Dictionary<TKey,TValue> 및 ConcurrentDictionary<TKey,TValue> 클래스는 클래스와 동일한 기능을 갖습니다Hashtable. 특정 유형의 Dictionary<TKey,TValue>는 Object 외의 경우, 값 유형에 관한 Hashtable보다 더 나은 성능을 제공합니다. 이는 Hashtable의 요소가 Object 형식이기 때문입니다. 따라서 일반적으로 값 형식을 저장하거나 검색할 때 박싱과 언박싱이 발생합니다. ConcurrentDictionary<TKey,TValue> 여러 스레드가 컬렉션에 동시에 액세스할 수 있는 경우 클래스를 사용해야 합니다.
참고하십시오
.NET