2012-04-16 25 views
20

Uso el diccionario en mi código pero mis colegas usan Hashtable. MSDN dice que trabajan en el par de valor clave & ejemplos de Hashtable y el diccionario son los mismos en MSDN.¿Cuáles son las diferencias b/w Hashtable, Dictionary y KeyValuePair?

Entonces, ¿qué tan diferentes son el uno del otro & que es el mejor de ellos o son adecuados para ocasiones de diferencia?

+0

posible duplicado de [¿Por qué diccionario se prefiere sobre tabla hash en C#?] (Http://stackoverflow.com/questions/301371/why-dictionary-is-preferred-over-hashtable-in-c) – Gabe

Respuesta

20

Hashtable es un contenedor asociativo sin tipo que usa la clase DictionaryEntry para devolver los resultados de la enumeración a través de sus pares clave-valor.

Dictionary<K,T> es un reemplazo genérico de Hashtable que se introdujo en C# 2.0. Utiliza KeyValuePair<K,T> objetos genéricos para representar sus pares clave-valor.

El único lugar donde debería ver Hashtable actualmente es un código heredado que debe ejecutarse en .NET 1.1, antes de que se introduzcan los genéricos. Se ha mantenido por razones de compatibilidad, pero debe preferir Dictionary<K,T> siempre que pueda.

16

KeyValuePair es la unidad de datos almacenada en un Hashtable (o Dictionary). No son equivalentes el uno al otro.

Un par de valores clave contiene una sola clave y un único valor. Un diccionario o hashtable contiene una asignación de muchas claves a sus valores asociados.

KeyValuePair es útil cuando desea almacenar dos piezas de información relacionadas como una sola unidad, especialmente cuando una está relacionada con la otra de forma identificativa (por ejemplo, 1234 => "David Smith"). También son lo que obtienes cuando iteras un diccionario. En .NET 4.0, estos solo están destinados a ser utilizados internamente en un diccionario: la clase Tuple se ha introducido para uso general.

La diferencia entre Hashtable y Dictionary es que no es una Hashtable de clase genérica tanto Es claves y valores son de tipo Object. Dictionary es genérico, y generalmente se debe utilizar a favor de Hashtable en cualquier desarrollo nuevo.

5

Un diccionario es una tabla hash tipada. Si conoce el tipo de datos de la clave y el valor, use un diccionario por motivos de rendimiento (evite la conversión).

0

Una diferencia importante es que Hashtable es seguro para subprocesos, mientras que Dictionary no lo es.

El documentation dice:

Hashtable es hilo de seguridad para el uso de múltiples hilos lector y un solo hilo de escritura. Es seguro para subprocesos para uso de subprocesos múltiples cuando solo uno de los subprocesos realiza operaciones de escritura (actualización), lo que permite lecturas sin bloqueos siempre que los escritores se serialicen en el Hashtable. Para admitir múltiples escritores, todas las operaciones en el Hashtable deben realizarse a través del contenedor devuelto por el método Synchronized, siempre que no haya subprocesos que lean el objeto Hashtable.

Contraste esto con el Dictionary documentation:

A Dictionary(Of TKey, TValue) puede soportar múltiples lectores simultáneamente, siempre que no se modifica la colección.

+0

Isn ¿Esto solo es un "rehash" de http://stackoverflow.com/questions/876656/difference-between-dictionary-and-hashtable? – sisdog

Cuestiones relacionadas