La diferencia entre HashTable y HashMap
Primero, las clases padre heredadas son diferentes.
Hashtable hereda de la clase Dictionary, mientras que HashMap hereda de la clase AbstractMap. Pero ambos implementan la interfaz Map.
Copie el código de código de la siguiente manera:
tabla hash de clase pública<K,V>
extiende Diccionario<K,V>
implementa Map<K,V>, clonable, serializable
clase pública HashMap<K,V>
extiende AbstractMap<K,V>
implementa Map<K,V>, clonable, serializable
En segundo lugar, la seguridad de los hilos es diferente.
Los métodos de Hashtable están sincronizados, mientras que los métodos de HashMap no están sincronizados de forma predeterminada. En un entorno concurrente de subprocesos múltiples, puede usar Hashtable directamente sin sincronizar sus métodos usted mismo. Sin embargo, cuando use HashMap, debe agregar el procesamiento de sincronización usted mismo.
En tercer lugar, ¿se debe proporcionar el método contiene?
HashMap eliminó el método contiene de Hashtable y lo cambió a contieneValue y contieneKey, porque el método contiene es fácilmente engañoso.
Hashtable conserva tres métodos: contiene, contieneValue y contieneKey, entre los cuales contiene y contieneValue tienen las mismas funciones.
Cuarto, si la clave y el valor permiten valores nulos.
La clave y el valor son objetos y no pueden contener claves duplicadas, pero pueden contener valores duplicados.
En Hashtable, no se permiten valores nulos tanto en la clave como en el valor.
En HashMap, se puede usar nulo como clave, y solo existe una clave de este tipo; puede haber una o más claves cuyo valor correspondiente sea nulo; Cuando el método get () devuelve un valor nulo, puede ser que la clave no exista en el HashMap o que el valor correspondiente a la clave sea nulo. Por lo tanto, en HashMap, el método get () no se puede usar para determinar si existe una determinada clave en HashMap, pero se debe usar el método contieneKey () para determinar.
Quinto, la implementación interna de los dos métodos transversales es diferente.
Tanto Hashtable como HashMap usan Iterator. Por razones históricas, Hashtable también utiliza Enumeración.
En sexto lugar, los valores hash son diferentes.
El uso de valores hash es diferente. HashTable usa directamente el código hash del objeto. Y HashMap vuelve a calcular el valor hash.
En séptimo lugar, la implementación interna utiliza diferentes métodos de inicialización y expansión de matrices.
El tamaño inicial y los métodos de expansión de las matrices en las dos implementaciones internas de Hashtable y HashMap. El tamaño predeterminado de la matriz hash en HashTable es 11 y el método de aumento es antiguo * 2 + 1.
El tamaño predeterminado de la matriz hash en HashMap es 16 y debe ser un exponente de 2.