Je commence juste à apprendre à utiliser HASHMAP et à lire le didacticiel Java, mais j'ai des problèmes.
J'essaie de mettre à jour la liste dans un hashmap mais je veux obtenir la liste de cette clé , Y a-t-il un moyen de mettre à jour une liste spécifique de la clé au lieu de faire ... 5 listes différentes et de mettre à jour ceux-ci? p>
HashMap<String, ArrayList<String>> mMap = new HashMap<String, ArrayList<String>>(); ArrayList<String> list = new ArrayList<String>(); mMap.put("A", list); mMap.put("B", list); mMap.put("C", list); mMap.put("D", list); Iterator iter = mMap.entrySet().iterator(); if (mMap.containsKey("A")) { Map.Entry mEntry = (Map.Entry) iter.next(); list.add("test"); mMap.put("A",list); System.out.println(mEntry.getKey() + " : " + mEntry.getValue()); } else if (mMap.containsKey("B")) { Map.Entry mEntry = (Map.Entry) iter.next(); list.add("entry"); mMap.put("B",list); System.out.println(mEntry.getKey() + " : " + mEntry.getValue()); }
6 Réponses :
Vous pouvez utiliser quelque chose comme:
Ah! Tu m'as battu à la réponse ;-)
Comment cela peut-il obtenir 3 upvotes lorsqu'il manque le fait qu'il mettait la même liste dans chaque entrée de carte? :-)
Je viens de répondre à sa question fondamentale: Existe-t-il une méthode plus simple pour mettre à jour la liste que ce que je fais?
Vous voulez probablement dire:
HashMap<String, List<String>> mMap = new HashMap<String, List<String>>(); mMap.put("A", new ArrayList<String>()); mMap.put("B", new ArrayList<String>()); mMap.put("C", new ArrayList<String>()); mMap.put("D", new ArrayList<String>()); if (mMap.containsKey("A")) { mMap.get("A").add("test"); System.out.println(mEntry.getKey() + " : " + mEntry.getValue()); } else if (mMap.containsKey("B")) { mMap.get("B").add("entry"); System.out.println(mEntry.getKey() + " : " + mEntry.getValue()); } ...
Si vous ajoutez la même liste qu'une valeur avec différentes touches, dans vos touches de cas A, B, C et D, tout point sur la même liste, et accédez à la liste et mettez à jour la liste via une touche. Les modifications seront ensuite visibles. dans toutes les listes. Chaque clé pointe vers la même structure de la liste. p>
Si vous souhaitez que les listes soient différentes, vous devez utiliser différents pour différentes touches, vous devez utiliser une liste différente. p>
Vous pouvez automatiser le processus, par exemple en faisant votre propre méthode d'insertion qui close la liste donnée. p>
Je pense que dans votre cas, vous pouvez utiliser Google Guava 'S multimap et listMultimap interfaces et ArrayListMultimap implémentation.
Choisir la bonne collection (dans link Il n'y a que des collections standard, mais multimap code> est juste dans ce cas) rend le code plus lisible: p>
Map<String, List<String>> mMap = Maps.newHashMap()
J'aime @tudor dit, utilisez mmap.get ("A"). Ajouter ("FOO"); P> LI>
Vous mettez la même liste exacte dans chaque entrée de carte. Vous devriez être p> li>
alternatifely, écrivez une méthode qui vérifie sur la mouche p>
Je ferais quelque chose comme ça.