web-dev-qa-db-fra.com

Java: créer une liste de HashMaps

J'ai essayé de créer une liste de cartes. Dans le code suivant, je m'attends à obtenir 

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

cependant, je n'ai eu que

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

Comment éviter de passer outre la première carte? Voici mon code: 

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 );

merci!

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

En tant qu'apprenant de Java issu d'une procédure en langage de procédure (SAS), j'ai passé plusieurs heures à apprendre et à expérimenter ArrayList, LinkedList, Map, LinkedMap, etc. Et je ne comprends pas pourquoi avec ma connaissance limitée. Maintenant, ces réponses suivantes sont toutes excellentes! Ils ont expliqué la structure de données très importante en Java, du moins pour moi.

MERCI À TOUS!!!!

10
john

Vous devez créer un nouveau HashMap pour chaque entrée, au lieu de réutiliser celui existant. Cela fonctionnerait:

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); 

vous pouvez également supprimer la list.add(new HashMap()); car cela ajoute à votre liste une carte vide qui n'est jamais remplie.

32
Luke Hutteman

Une chose qui mérite peut-être aussi d'être mentionnée, est que vous devez définir le type des éléments que vous utilisez dans la Liste, pour le HashMap, ce n'est pas possible car vous mélangez Entiers et Chaînes.

De plus, vous devez utiliser l'interface Liste comme type afin de pouvoir modifier l'implémentation (ArrayList ou peu importe) dans le futur.

Voici le code corrigé:

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

Oui, la carte de hachage de ce morceau de code 

list.add(new HashMap());

n'est jamais référencé. Donc, finalement, vous obtenez une liste de 3 éléments, dont 2 sont identiques cependant.

1
Denis Kniazhev

Vous ne sauvegardez jamais une référence à cette carte:

list.add(new HashMap());
0
Peter Knego

avoir trois ajouts à la liste. le premier ajout concerne une nouvelle instance de carte; vous ne définissez jamais aucune valeur. La seconde ajoute que vous transmettez une référence à nMap, qui en a 1, oui. Le troisième ajoute que vous passez la même référence. Donc, la carte a maintenant 3 références, la première à une carte à laquelle vous n'avez jamais ajouté de valeur, les 2 suivantes à la même carte. c'est pourquoi vous obtenez le même résultat.

0
hvgotcodes