2010-11-04 37 views
8

Intenté crear una lista de mapas. En el siguiente código, que estoy esperando para conseguirJava: crear una lista de HashMaps

[{start=1,text=ye}, {start=2,text=no}] 
embargo

, sólo tengo

[{start=2,text=no}, {start=2,text=no}] 

Cómo evitar anulando el primer mapa? Aquí está mi código:

HashMap mMap = new HashMap(); 
ArrayList list = new ArrayList(); 
list.add(new HashMap()); 
mMap.put("start",1); 
mMap.put("text","yes"); 
list.add(mMap); 
mMap.put("start",2); 
mMap.put("text","no"); 
list.add(mMap); 
System.out.println("Final result: " + list); 

gracias!

==========================

Como alumno de Java que vino de un fondo lenguaje de procedimientos (SAS), Pasé bastantes horas aprendiendo y experimentando ArrayList, LinkedList, Map, LinkedMap, etc. --- No lo hago funcionar. Y no entiendo por qué con mi conocimiento limitado. ¡Ahora, estas siguientes respuestas son excelentes! Explicaron una estructura de datos muy importante en Java, al menos para mí.

GRACIAS TODOS !!!!

Respuesta

28

Necesita crear un nuevo HashMap para cada entrada, en lugar de reutilizar el existente. Esto funcionaría:

HashMap mMap = new HashMap(); 
mMap.put("start",1); 
mMap.put("text","yes"); 
list.add(mMap); 
mMap = new HashMap(); // create a new one! 
mMap.put("start",2); 
mMap.put("text","no"); 
list.add(mMap); 

También, puede quitar la list.add(new HashMap()); como que añade un mapa vacío a su lista que nunca se llena.

0

que nunca están ahorrando una referencia a este mapa:

list.add(new HashMap()); 
0

tienen tres agrega a la lista. el primer agregado es a una nueva instancia de mapa; nunca estableces ningún valor El segundo agrega que pasas en una referencia a nMap, que tiene 1, sí. El tercero agrega que pasa la misma referencia. Entonces, el Mapa ahora tiene 3 referencias, el primero en un mapa al que nunca agregaste ningún valor, los 2 siguientes en el mismo mapa. por eso obtienes el mismo resultado.

1

Sí, mapa hash de esta pieza de código

list.add(new HashMap()); 

no se hace referencia. Así que eventualmente obtienes una lista de 3 artículos, 2 de los cuales son idénticos sin embargo.

5

Algo que es tal vez también vale la pena mencionar, es que debe definir el tipo de los elementos que se utilizan en la lista, para el HashMap no es posible debido a que usted está mezclando enteros y Cuerdas.

Y otra cosa es que se debe utilizar la interfaz deLista como tipo, por lo que son capaces de cambiar la implementación ( ArrayList o lo que sea) en el futuro.

Aquí el código corregido:

Map mMap = new HashMap(); 
List<Map> list = new ArrayList();