ordered example code java collections dictionary hashtable

example - hashtable vs hashmap java



¿HashTable mantiene el orden de inserción? (5)

El siguiente código me da la salida en el mismo orden de inserción. Leí el javadoc y ni siquiera hablaron sobre el orden de inserción. ¿Puede alguien ayudarme a obtener la información correcta?

import java.util.*; public class hash { public static void main(String[] args) { String str[] = { "japan", "usa", "japan", "russia", "usa", "japan", "japan", "australia"}; int len = 8; Hashtable ht = new Hashtable(); int i = 0; while (i < len) { String c = str[i]; System.out.println("c :" + c); Integer intg = (Integer) ht.get(c); if (intg == null) ht.put(c, new Integer(1)); else ht.put(c, new Integer(intg.intValue() + 1)); i++; } Enumeration k = ht.keys(); while (k.hasMoreElements()) { String key = (String) k.nextElement(); System.out.println(key + " > " + ht.get(key)); } } }


Desde Mapa Javadoc.

El orden de un mapa se define como el orden en que los iteradores en las vistas de colección del mapa devuelven sus elementos. Algunas implementaciones de mapas, como la clase TreeMap, ofrecen garantías específicas en cuanto a su orden; otros, como la clase HashMap, no lo hacen.

También es muy útil buscar dentro del código de Hashtable y HashMap.


LinkedHashMap se usa para mantener el orden de inserción de elementos. Hashtable es similar a HashMap, pero no permite una clave o valor nulo, mientras que HashMap permite una clave nula y varios valores nulos ...


No, no lo hace. Para preservar el orden de inserción, use java.util.LinkedHashMap ( javadoc ).

Además, HashMap ahora se prefiere a Hashtable , porque Hashtable tiene una sobrecarga de concurrencia innecesaria. (Ver diferencias entre HashMap y Hashtable?. )


No, no lo hace. Solo conoce el orden "hash". Si reordena las cadenas, verá que aún aparecen en el mismo orden desde la tabla hash.


Hashtable se utiliza para una búsqueda rápida, no para mantener el orden. Debes mirar en LinkedHashMap u otras estructuras de datos.