2012-05-22 22 views
361

Estoy usando un HashMap. Cuando repito sobre el mapa, los datos se devuelven en orden aleatorio (a menudo el mismo). Pero los datos se insertaron en un orden específico, y necesito preservar el orden de inserción. ¿Cómo puedo hacer esto?¿Cómo se conserva el orden de inserción en HashMap?

+11

http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html –

Respuesta

813

LinkedHashMap es exactamente lo que estás buscando.

Es exactamente como HashMap, excepto que cuando itera sobre él, presenta los elementos en el orden de inserción.

+6

según el documento java dice: Esta lista vinculada define el orden de iteración, que normalmente es el orden en qué teclas se insertaron en el mapa. ¿¿¿¿¿NORMALMENTE ????? ¿Qué significa eso? la inserción de la orden no es segura .... – Xenione

+14

@Xenione: Puede elegir entre orden de inserción y orden de acceso. Vea el último argumento en http://bit.ly/1jZXlCl – NPE

+6

@ Xenione [Tenga en cuenta que el orden de inserción no se ve afectado si se vuelve a insertar una clave en el mapa], cuando una tecla se pone dos veces, la segunda puesta no cambia el orden para iterar el orden no es exactamente el orden de inserción debido a la unicidad de las claves; normalmente significa que si las claves son únicas –

48

HashMap no está ordenado por la segunda línea de la documentación:

Esta clase no ofrece ninguna garantía en cuanto a la orden del mapa; en particular, no garantiza que el orden se mantendrá constante a lo largo del tiempo.

Tal vez puedas hacer lo que aix sugiere y usar un LinkedHashMap u otra colección ordenada. This link can help you find the most appropriate collection to use.

Cuestiones relacionadas