2012-03-19 20 views
19

¿Cuál es la diferencia entre Dictionary y Hashtable y cómo trabajo con la clase Dictionary en Java?¿Cuál es la diferencia entre Hashtable y Dictionary?

+0

Hay muchas cosas buenas en google - http://docs.oracle.com/javase/tutorial/collections/implementations/index.html – Vic

+0

Y en stackoverflow - http://stackoverflow.com/questions/267312/difference-between-a-hashmap-and-a-dictionary-adt – Vic

+2

Si tiene otra opción, debe usar 'Map' en lugar de' Dictionary', que está obsoleto. – assylias

Respuesta

18

Dictionary es una clase base abstracta de Hashtable. Ambos todavía están en JDK por compatibilidad con versiones anteriores con el código anterior. Se espera que usemos HashMap y otras implementaciones de la interfaz Map introducidas en Java 1.2.

+1

Vale la pena mencionar que Hashtable es seguro para subprocesos, mientras que HashMap no lo es. Ver mi respuesta – assylias

+0

Hashtable ha sido adaptado para implementar Map. – user2864740

2

he encontrado una conferencia sobre los principios de programación orientada a objetos que contiene la respuesta que buscas:

http://www.clear.rice.edu/comp202/04-fall/lectures/lec23/

EDIT:

Diccionario Un tema importante en la computación es el tema del almacenamiento/recuperación/eliminación: almacenar datos en algún lugar para que luego puedan recuperarse y d se incluye si ya no es necesario, todo esto de la manera más eficiente. La abstracción de estas actividades informáticas se materializa en la noción de lo que se llama un diccionario, expresado en Java como una interfaz de la siguiente manera.

Hash Tables Una tabla hash es una generalización de una matriz común. Cuando el número de claves realmente almacenadas es pequeño en relación con el número total de claves posibles, las tablas hash se vuelven una alternativa efectiva para direccionar directamente una matriz, ya que una tabla hash normalmente utiliza una matriz de tamaño proporcional al número de claves realmente almacenado. En lugar de utilizar la clave como un índice de matriz directamente, el índice de matriz se calcula a partir de la clave. Con hashing, un elemento con la clave k se almacena en la ranura h (k); es decir, se usa una función hash h para calcular la ranura desde la tecla k. h mapea el conjunto U de llaves en las ranuras de una tabla hash T [0..m-1]: h: U -> {0, 1, ..., m - 1}

2

La clase de diccionario es el padre abstracto de cualquier clase, como Hashtable, que asigna claves a valores. Cada clave y cada valor es un objeto. En cualquier objeto de diccionario, cada tecla está asociada con un máximo de un valor. Dado un diccionario y una clave, se puede buscar el elemento asociado. Cualquier objeto no nulo se puede usar como una clave y como un valor.

14

El javadoc para Dictionary tiene su respuesta.

La clase de diccionario es el padre abstracto de cualquier clase, como Hashtable, que asigna claves a valores.

Usted no trabaja directamente con Dictionary, ya que es una clase de abstract.

También tenga en cuenta lo siguiente de la misma documentación:

NOTA: Esta clase es obsoleto. Las nuevas implementaciones deberían implementar la interfaz Map, en lugar de extender esta clase.

3

es una implementación de Dictionary. No puede usar Dictionary directamente porque es una clase abstracta.

Pero no debe usar ninguno de los dos porque han sido reemplazados por la interfaz Map y las clases implementadas, de las cuales HashMap es la más popular.

1

De acuerdo con los javadocs de diccionario:

NOTA: Esta clase es obsoleto. Las nuevas implementaciones deberían implementar la interfaz de mapa , en lugar de extender esta clase.

Hashtable es JDK 1.0 vintage, también. Debería preferir la interfaz Map y sus implementaciones más modernas: HashMap y TreeMap.

8

Dictionary es una clase abstracta, superclase de Hashtable. No debe usar Dictionary ya que es obsolete. En cuanto a la tabla hash, la ventaja que tenía sobre otros mapas como HashMap era hilo de seguridad, pero con la introducción de ConcurrentHashMap desde Java 1.5, no hay ninguna razón real para usarlo por más tiempo - ver javadoc

A partir de la plataforma Java 2 v1.2, esta clase se adaptó para implementar la interfaz Map, convirtiéndola en miembro de Java Collections Framework. A diferencia de las nuevas implementaciones de colecciones, Hashtable está sincronizado. Si no se necesita una implementación segura para subprocesos, se recomienda utilizar HashMap en lugar de Hashtable. Si se desea una implementación altamente concurrente segura para subprocesos, se recomienda utilizar ConcurrentHashMap en lugar de Hashtable.

En resumen: No utilice Dictionary o Hashtable, a menos que realmente tiene que por razones de compatibilidad, utilice uno HashMap si no necesita hilo de seguridad, o si su ConcurrentHashMap mapa se utiliza en una concurrente ambiente.

Cuestiones relacionadas