2012-04-16 1 views
20

내 코드에서 Dictionary를 사용하지만 동료는 Hashtable을 사용합니다. MSDN에서 키 값 쌍에 대해 설명합니다 & 해시 테이블과 사전의 예는 MSDN에서 동일합니다.Hashtable, Dictionary 및 KeyValuePair의 차이점은 무엇입니까?

그런 다음 서로 다른 점은 무엇입니까 & 차이점은 무엇입니까?

+0

중복 가능성 [이유는 사전 C에서 # 해시 테이블 선호 되는가? (http://stackoverflow.com/questions/301371/why-dictionary-is-preferred-over-hashtable-in-c) – Gabe

답변

20

HashtableDictionaryEntry 클래스를 사용하여 키 - 값 쌍을 통해 열거 결과를 반환하는 형식화되지 않은 연관 컨테이너입니다.

Dictionary<K,T>은 C# 2.0에 도입 된 Hashtable의 일반적인 대체 파일입니다. KeyValuePair<K,T> 일반 객체를 사용하여 키 - 값 쌍을 나타냅니다.

요즘 Hashtable을 볼 수있는 유일한 곳은 제네릭이 도입되기 전에 .NET 1.1에서 실행해야하는 레거시 코드입니다. 호환성 문제로 인해 보관되어 왔지만 가능할 때마다 Dictionary<K,T>을 선호합니다.

16

KeyValuePairHashtable (또는 Dictionary)에 저장된 데이터 단위입니다. 그것들은 서로 동등하지 않습니다.

키 값 쌍은 단일 키와 단일 값을 포함합니다. 사전 또는 해시 테이블에는 여러 키가 연관된 값에 매핑되어 있습니다.

KeyValuePair은 두 개의 관련 정보를 하나의 단위로 저장하려는 경우 유용합니다 (특히 1234 => "David Smith"와 같은 식별 방식으로 다른 정보와 관련이있는 경우). 또한 사전을 반복 할 때 다시 얻는 것입니다. .NET 4.0에서는 이러한 것들이 실제로는 사전 내에서 사용하기위한 용도로만 사용됩니다. Tuple 클래스는 범용 목적으로 도입되었습니다.

HashtableDictionary의 차이점은 Hashtable은 일반 클래스가 아니기 때문입니다. 키와 값은 모두 Object입니다. Dictionary은 일반적이며 새로운 개발에서는 일반적으로 Hashtable에 사용되어야합니다.

5

사전은 형식화 된 해시 테이블입니다. 키와 값의 데이터 유형을 알고있는 경우 성능상의 이유로 사전을 사용하십시오 (전송하지 마십시오).

0

Hashtable은 스레드로부터 안전하지만, Dictionary은 그렇지 않습니다.

documentation는 말한다 :

Hashtable 여러 독자 스레드와 하나의 쓰기 스레드로 안전하게 사용할 수 스레드입니다. 스레드 중 하나만 쓰기 (업데이트) 작업을 수행 할 때 다중 스레드 사용을 위해 스레드 안전성을 유지합니다. 이는 작성자가 Hashtable으로 직렬화되면 잠금없는 읽기를 허용합니다. 여러 작성기를 지원하려면 Hashtable의 모든 작업은 Synchronized 메서드에서 반환 된 래퍼를 통해 수행해야합니다. 단, Hashtable 개체를 읽는 스레드가없는 경우에 한합니다.Dictionary documentation

명암이 :

Dictionary(Of TKey, TValue)는만큼 컬렉션이 변경되지 않는 한, 동시에 다수의 독자들을 지원할 수있다.

+0

ISN 이건 그냥 http://stackoverflow.com/questions/876656/difference-between-dictionary-and-hashtable의 "rehash"일까요? – sisdog

관련 문제