내 코드에서 Dictionary를 사용하지만 동료는 Hashtable을 사용합니다. MSDN에서 키 값 쌍에 대해 설명합니다 & 해시 테이블과 사전의 예는 MSDN에서 동일합니다.Hashtable, Dictionary 및 KeyValuePair의 차이점은 무엇입니까?
그런 다음 서로 다른 점은 무엇입니까 & 차이점은 무엇입니까?
내 코드에서 Dictionary를 사용하지만 동료는 Hashtable을 사용합니다. MSDN에서 키 값 쌍에 대해 설명합니다 & 해시 테이블과 사전의 예는 MSDN에서 동일합니다.Hashtable, Dictionary 및 KeyValuePair의 차이점은 무엇입니까?
그런 다음 서로 다른 점은 무엇입니까 & 차이점은 무엇입니까?
Hashtable
은 DictionaryEntry
클래스를 사용하여 키 - 값 쌍을 통해 열거 결과를 반환하는 형식화되지 않은 연관 컨테이너입니다.
Dictionary<K,T>
은 C# 2.0에 도입 된 Hashtable
의 일반적인 대체 파일입니다. KeyValuePair<K,T>
일반 객체를 사용하여 키 - 값 쌍을 나타냅니다.
요즘 Hashtable
을 볼 수있는 유일한 곳은 제네릭이 도입되기 전에 .NET 1.1에서 실행해야하는 레거시 코드입니다. 호환성 문제로 인해 보관되어 왔지만 가능할 때마다 Dictionary<K,T>
을 선호합니다.
KeyValuePair
은 Hashtable
(또는 Dictionary
)에 저장된 데이터 단위입니다. 그것들은 서로 동등하지 않습니다.
키 값 쌍은 단일 키와 단일 값을 포함합니다. 사전 또는 해시 테이블에는 여러 키가 연관된 값에 매핑되어 있습니다.
KeyValuePair
은 두 개의 관련 정보를 하나의 단위로 저장하려는 경우 유용합니다 (특히 1234 => "David Smith"와 같은 식별 방식으로 다른 정보와 관련이있는 경우). 또한 사전을 반복 할 때 다시 얻는 것입니다. .NET 4.0에서는 이러한 것들이 실제로는 사전 내에서 사용하기위한 용도로만 사용됩니다. Tuple 클래스는 범용 목적으로 도입되었습니다.
Hashtable
과 Dictionary
의 차이점은 Hashtable
은 일반 클래스가 아니기 때문입니다. 키와 값은 모두 Object
입니다. Dictionary
은 일반적이며 새로운 개발에서는 일반적으로 Hashtable
에 사용되어야합니다.
사전은 형식화 된 해시 테이블입니다. 키와 값의 데이터 유형을 알고있는 경우 성능상의 이유로 사전을 사용하십시오 (전송하지 마십시오).
Hashtable
은 스레드로부터 안전하지만, Dictionary
은 그렇지 않습니다.
documentation는 말한다 :
Hashtable
여러 독자 스레드와 하나의 쓰기 스레드로 안전하게 사용할 수 스레드입니다. 스레드 중 하나만 쓰기 (업데이트) 작업을 수행 할 때 다중 스레드 사용을 위해 스레드 안전성을 유지합니다. 이는 작성자가Hashtable
으로 직렬화되면 잠금없는 읽기를 허용합니다. 여러 작성기를 지원하려면Hashtable
의 모든 작업은Synchronized
메서드에서 반환 된 래퍼를 통해 수행해야합니다. 단, Hashtable 개체를 읽는 스레드가없는 경우에 한합니다.Dictionary
documentation와
명암이 :
의
Dictionary(Of TKey, TValue)
는만큼 컬렉션이 변경되지 않는 한, 동시에 다수의 독자들을 지원할 수있다.
ISN 이건 그냥 http://stackoverflow.com/questions/876656/difference-between-dictionary-and-hashtable의 "rehash"일까요? – sisdog
중복 가능성 [이유는 사전 C에서 # 해시 테이블 선호 되는가? (http://stackoverflow.com/questions/301371/why-dictionary-is-preferred-over-hashtable-in-c) – Gabe