Hashtable 및 Dictionary 컬렉션 형식

업데이트: 2007년 11월

Hashtable 클래스 및 Dictionary<TKey, TValue> 제네릭 클래스는 IDictionary 인터페이스를 구현합니다. 또한 Dictionary<TKey, TValue> 제네릭 클래스는 IDictionary<TKey, TValue> 제네릭 인터페이스를 구현합니다. 따라서 이러한 컬렉션의 각 요소는 키-값 쌍입니다.

Hashtable 개체는 컬렉션의 요소를 포함하는 버킷으로 구성됩니다. 버킷은 Hashtable 내에 있는 요소의 가상 하위 그룹으로, 대부분의 컬렉션보다 더 쉽고 빠른 검색을 가능하게 합니다. 각 버킷은 해시 함수를 사용하고 요소의 키를 기준으로 생성된 해시 코드와 연결됩니다.

해시 함수는 키를 기준으로 숫자 해시 코드를 반환하는 알고리즘입니다. 키는 저장되는 개체의 어떤 속성 값입니다. 해시 함수는 항상 동일한 키에 대해 동일한 해시 코드를 반환해야 합니다. 해시 테이블에서 요소를 검색할 때, 두 개의 서로 다른 키에 대해 동일한 해시 코드를 생성하는 해시 함수도 가능하지만 고유한 각 키에 대해 고유한 해시 코드를 생성하는 해시 함수가 더 높은 성능을 발휘합니다.

Hashtable에서 요소로 사용되는 각 개체는 GetHashCode 메서드 구현을 사용하여 자체적으로 해시 코드를 생성할 수 있어야 합니다. 그러나 IHashCodeProvider 구현을 해당 매개 변수의 하나로 받아들이는 Hashtable 생성자를 사용하여 Hashtable의 모든 요소에 대한 해시 함수를 지정할 수도 있습니다.

Hashtable에 추가되는 개체는 해당 개체의 해시 코드와 일치하는 해시 코드와 연결된 버킷에 저장됩니다. Hashtable에서 값을 찾을 경우, 해시 코드는 해당 값에 대해 생성되고 해당 해시 코드와 연결된 버킷이 검색됩니다.

예를 들어, 문자열에 대한 해시 함수가 문자열의 각 문자에 대한 ASCII 코드를 가지고 이것을 모두 더하여 해시 코드를 생성할 수 있습니다. "picnic"이라는 문자열은 "basket" 문자열에 대한 해시 코드와 다른 해시 코드를 가지므로, 문자열 "picnic"과 "basket"은 다른 버킷에 존재할 것입니다. 반대로, "stressed"와 "desserts"는 동일한 해시 코드를 가지므로 동일한 버킷에 존재합니다.

Dictionary<TKey, TValue> 클래스의 기능은 Hashtable 클래스의 기능과 동일합니다. 특정 형식(Object 제외)의 Dictionary<TKey, TValue> 성능은 값 형식에 대한 Hashtable 성능보다 좋습니다. Hashtable의 요소는 Object 형식이므로 값 형식을 저장하거나 검색할 경우 대개 boxing 및 unboxing이 발생하기 때문입니다.

참고 항목

참조

Hashtable

IDictionary

IHashCodeProvider

Dictionary<TKey, TValue>

System.Collections.Generic.IDictionary<TKey, TValue>

기타 리소스

일반적으로 사용되는 컬렉션 형식