2011-08-09 19 views
5

Aquí está mi código para almacenar los datos en HashMap y mostrar los datos utilizando iteradorComo llegar los elementos en el orden correcto de iterador()

public static void main(String args[]) { 
    HashMap<String, String> hm = new HashMap<String, String>(); 
    hm.put("aaa", "111"); 
    hm.put("bbb", "222"); 
    hm.put("ccc", "333"); 
    hm.put("ddd", "444"); 
    hm.put("eee", "555"); 
    hm.put("fff", "666"); 

    Iterator iterator = hm.keySet().iterator(); 

    while (iterator.hasNext()) { 
     String key = (String) iterator.next(); 
     String val = hm.get(key); 

     System.out.println(key + " " + val); 
    } 
} 

Pero no se muestra en el orden en que Almacené . ¿Podría alguien decirme por favor dónde me estoy equivocando? ¿Cómo puedo obtener los elementos en el orden?

Respuesta

22

Un HashMap tiene ningún orden garantizada:

Esta clase no ofrece ninguna garantía en cuanto al orden del mapa;

Utilice un LinkedHashMap.

Tabla hash e implementación de lista enlazada de la interfaz de Mapa, con orden de iteración predecible.

6

Es necesario utilizar un LinkedHashMap porque mantiene ordenamiento de sus entradas, a diferencia de HashMap.

De los javadocs:

... implementación de la interfaz del mapa con el fin iteración predecible. Esta implementación difiere de HashMap en que mantiene una lista doblemente enlazada que se ejecuta en todas las entradas . Esta lista vinculada define el orden de iteración, que es normalmente el orden en que se insertaron las claves en el mapa (orden de inserción).

+0

Muchas gracias. Ahora mi problema está resuelto – Santhosh

2

HashMap no mantener el orden en el que ponemos los datos en it.So Puede seguir LinkedHashMap instead.It mantiene el orden en el que ponemos data.LinkedHashMap se puede utilizar igual que HashMap.

Map<key,value> map=new LinkedHashMap<key,value>(); 
map.put("key","value"); 
map.put("key","value"); 
map.put("key","value"); 

// mismo modo se puede utilizar para acceder a iterador too.It de datos se mostrará en dfata orden en que se agregan a él.

+0

-1, respuesta duplicada. – mre

+0

duplicado ??? nunca copio una vez la respuesta. Lo que sé que publiqué Eso no significa lo que sé que nadie sabe? Piensa antes de dar una marca negativa. –

+0

Mire las respuestas proporcionadas por otros. Ya explicaron que 'HashMap' no mantiene el orden, y sugirieron usar' LinkedHashMap' como una alternativa. Su respuesta no proporciona nada más que lo que ya se ha proporcionado. De hecho, proporciona menos, ya que ni siquiera se vincula a los javadocs. Reflexioné un poco sobre el voto negativo e incluso me aseguré de no hacerlo de forma anónima, de nada. – mre

0

La razón es HashMap y HashSet no garantiza el orden de los valores almacenados. La posición de los elementos dependerá del tamaño de la tabla interna y hashCode de la clave.

Si desea cargar sus datos en algún orden, debe ordenar claves/valores. Por ejemplo, puede colocar colecciones de las entradas (Map.entrySet()) en la lista y ordenarlas por cualquier criterio que desee. O puede usar SortedMap (TreeMap por ejemplo) para almacenar sus objetos.

Cuestiones relacionadas