2011-01-27 12 views
19

Estoy tratando de poner algunos valores clave en el mapa y tratando de recuperarlos en la misma secuencia en que se insertaron. Por ejemplo a continuación es mi códigocómo obtener las claves en el mapa con la misma secuencia que se insertaron

import java.util.*; 
import java.util.Map.Entry; 

public class HashMaptoArrayExample { 

    public static void main(String args[]) 

    { 
    Map<String,Integer> map= new HashMap<String,Integer>(); 

    // put some values into map 

    map.put("first",1); 
    map.put("second",2); 
    map.put("third",3); 
    map.put("fourth",4); 
    map.put("fifth",5); 
    map.put("sixth",6); 
    map.put("seventh",7); 
    map.put("eighth",8); 
    map.put("ninth",9); 



    Iterator iterator= map.entrySet().iterator(); 
     while(iterator.hasNext()) 
     { 
      Entry entry =(Entry)iterator.next(); 
      System.out.println(" entries= "+entry.getKey().toString()); 
     } 

    } 
} 

Quiero recuperar las claves como abajo

first second third fourth fifth sixth ..... 

Pero se está mostrando en un orden aleatorio de la siguiente manera en mi salida

OUTPUT 

ninth eigth fifth first sixth seventh third fourth second 
+0

Duplicado ?? http://stackoverflow.com/questions/663374/java-ordered-map –

+0

java.util.LinkedHashMap y nunca/nunca use java.util.HashMap a menos que tenga una razón muy fuerte (es decir, huella de memoria reducida y falta de iteración)) imo, HashMap es la peor estructura de datos en java.util (quizás superada solo por java.util.Stack) – bestsss

+0

@msalvadores No exactamente. Se trataba de entradas clasificadas (alfabéticamente, por ejemplo), esta se trata de que se devuelvan en el mismo orden en que se agregaron al mapa. – biziclop

Respuesta

53

No puede hacer esto con HashMap, que no mantiene un orden de inserción en ninguna parte de sus datos. Mira LinkedHashMap, que fue diseñado precisamente para mantener este orden.

+0

Muchas gracias. Funcionó muy bien. Una última pregunta. En lugar de usar iterator.hasNext() puedo usar advanced for loop – JavaGeek

+0

@Sukumar: Absolutamente: 'for (Map.Entry <..,..> entry: map.entrySet()) {...}'. –

+1

seguro que puede (para x: y) compilarse efectivamente en el iterador; hasNext(), next() – bestsss

3

HashMap es una tabla de picadillo. Significa que el orden en que se insertan las claves es irrelevante, ya que no se almacenan en este orden. En el momento en que inserta otra clave, se olvida la información sobre cuál fue la última clave.

Si desea recordar el orden de inserción, debe utilizar una estructura de datos diferente.

+0

..... ¿cuál? – CodyBugstein

+0

@Imray Mire la respuesta de Jon. –

Cuestiones relacionadas