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!!!!
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.
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();
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.
Vous ne sauvegardez jamais une référence à cette carte:
list.add(new HashMap());
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.