HashTable es otra clase de implementación de Map. Esta clase implementa una tabla hash que asigna claves a los valores correspondientes. Cualquier objeto no nulo se puede utilizar como clave o valor. Es decir, no se permite almacenar objetos nulos (se permiten otras colecciones) .
La versión JDK1.0 existe y es el primer conjunto de dos columnas. La seguridad del hilo es sincrónica (hilo único, velocidad lenta).
HashTable: la capa inferior es una tabla hash, una colección segura para subprocesos, una colección de un solo subproceso y velocidad lenta.
HashMap: la capa inferior es una tabla hash, que es una colección de subprocesos inseguros y una colección de subprocesos múltiples, que es rápida.
Colección HashMap (y todas las colecciones aprendidas antes): puede almacenar valores / claves nulos.
La colección HashTable, como la colección Vector, ha sido reemplazada por colecciones más avanzadas después de la versión JDK1.2. Es decir, HashMap y ArrayList, porque el subproceso múltiple es rápido.
Nota: Las propiedades, una subclase de HashTable, todavía se utilizan activamente.
La colección de propiedades es una colección única combinada con flujos de E / S.
Por ejemplo, la diferencia entre los dos:
public static void main (String [] args) { HashMap <String, String> hashMap = new HashMap <> (); // HashMap permite valores nulos y claves nulas hashMap.put (null, "a"); hashMap. put ("b", null); hashMap.put (null, null); // Tenga en cuenta que la clave está duplicada y el valor reemplaza System.out.println (hashMap); // {null = null, b = null } Hashtable <String, String> hashtable = new Hashtable <> (); // No está permitido almacenar claves vacías y se informa NullPointerException. // hashtable.put (null, "a"); System.out.println ( tabla hash); }
Ejemplo: cuente el número de ocurrencias de caracteres en una cadena
Código:
public static void main (String [] args) { Scanner sc = new Scanner (System.in); // Escriba la cadena System.out.println ("Ingrese una cadena de caracteres:"); String str = sc.next (); // Convertir a matriz de caracteres char [] charList = str.toCharArray (); // Crear colección HashMap HashMap <Character, Integer> hashMap = new HashMap <> (); // Recorrer para (char c: charList) { if (hashMap.get (c)! = null) {// hashMap.put (c, hashMap.get (c) + 1); } else {// primero guardar en hashMap.put (c, 1); } } // Recorrer HashMap, dos métodos, uno: convertir la clave en un conjunto y luego recorrer el conjunto // Segundo, sacar el objeto de entrada, atravesar el objeto de entrada // Ambos se implementan aquí para profundizar la impresión del código Set <Character> keySet = hashMap.keySet (); for (char c: keySet) {// Unboxing automático System.out.println ("Character" + c + "El número de ocurrencias es:" + hashMap.get (c )); } System.out.println ("--------------"); // Dos métodos de recorrido diferentes de HashMap, los lectores pueden elegir uno de ellos Set <Map.Entry <Character, Integer >> entryMap = hashMap.entrySet (); Iterator <Map.Entry <Character, Integer >> iterator = entryMap.iterator (); while (iterator.hasNext ()) { Map.Entry <Character, Integer> entry = iterator .next (); System.out.println ("Carácter" + entry.getKey () + "El número de apariciones es:" + entry.getValue ()); } }
Ejecutar captura de pantalla: