9
votes

HashMap Mise à jour ArrayList

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


0 commentaires

6 Réponses :


18
votes

Vous pouvez utiliser quelque chose comme: xxx


3 commentaires

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?



2
votes

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());
    }
   ...


0 commentaires

0
votes

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.

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.

Vous pouvez automatiser le processus, par exemple en faisant votre propre méthode d'insertion qui close la liste donnée.


0 commentaires

2
votes

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


0 commentaires

6
votes
  1. J'aime @tudor dit, utilisez mmap.get ("A"). Ajouter ("FOO");

  2. Vous mettez la même liste exacte dans chaque entrée de carte. Vous devriez être xxx

    alternatifely, écrivez une méthode qui vérifie sur la mouche xxx


0 commentaires

1
votes

Je ferais quelque chose comme ça. XXX


0 commentaires