web-dev-qa-db-fra.com

Imprimer toutes les paires clé / valeur dans un Java ConcurrentHashMap

J'essaie simplement d'imprimer toutes les paires clé/valeur dans un ConcurrentHashMap.

J'ai trouvé ce code en ligne que je pensais le faire, mais il semble obtenir des informations sur les buckets/hashcode. En fait, pour être honnête, la sortie est assez étrange, il est possible que mon programme soit incorrect, mais je veux d'abord m'assurer que cette partie est ce que je veux utiliser.

for (Entry<StringBuilder, Integer> entry : wordCountMap.entrySet()) {
    String key = entry.getKey().toString();
    Integer value = entry.getValue();
    System.out.println("key, " + key + " value " + value);
}

Cela donne une sortie pour environ 10 clés différentes, avec des nombres qui semblent être la somme du nombre total d'insertions dans la carte.

12
DanGordon

J'ai testé votre code et fonctionne correctement. J'ai ajouté une petite démo avec une autre façon d'imprimer toutes les données de la carte:

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);

for (String key : map.keySet()) {
    System.out.println(key + " " + map.get(key));
}

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey().toString();
    Integer value = entry.getValue();
    System.out.println("key, " + key + " value " + value);
}
31
Slimu

Le HashMap a forEach dans sa structure. Vous pouvez l'utiliser avec une expression lambda pour imprimer le contenu dans une seule ligne telle que:

map.forEach((k,v)-> System.out.println(k+", "+v));
19
Rick Il Grande

Vous pouvez faire quelque chose comme

Iterator iterator = map.keySet().iterator();

while (iterator.hasNext()) {
   String key = iterator.next().toString();
   Integer value = map.get(key);

   System.out.println(key + " " + value);
}

Ici, "map" est votre concurrent HashMap.

6
nikoo28
  //best and simple way to show keys and values

    //initialize map
    Map<Integer, String> map = new HashMap<Integer, String>();

   //Add some values
    map.put(1, "Hi");
    map.put(2, "Hello");

    // iterate map using entryset in for loop
    for(Entry<Integer, String> entry : map.entrySet())
    {   //print keys and values
         System.out.println(entry.getKey() + " : " +entry.getValue());
    }

   //Result : 
    1 : Hi
    2 : Hello
4
Khalid Habib

Travaillez à 100%, essayez ce code pour la clé et la valeur get all hashmap

static HashMap<String, String> map = new HashMap<>();

map.put("one"  " a " );
map.put("two"  " b " );
map.put("three"  " c " );
map.put("four"  " d " );

il suffit d'appeler cette méthode chaque fois que vous souhaitez afficher la valeur HashMap

 private void ShowHashMapValue() {

        /**
         * get the Set Of keys from HashMap
         */
        Set setOfKeys = map.keySet();

/**
 * get the Iterator instance from Set
 */
        Iterator iterator = setOfKeys.iterator();

/**
 * Loop the iterator until we reach the last element of the HashMap
 */
        while (iterator.hasNext()) {
/**
 * next() method returns the next key from Iterator instance.
 * return type of next() method is Object so we need to do DownCasting to String
 */
            String key = (String) iterator.next();

/**
 * once we know the 'key', we can get the value from the HashMap
 * by calling get() method
 */
            String value = map.get(key);

            System.out.println("Key: " + key + ", Value: " + value);
        }
    } 
0
Arpit Patel

ConcurrentHashMap est très similaire à la classe HashMap, sauf que ConcurrentHashMap offre une concurrence simultanée maintenue en interne. Cela signifie que vous n'avez pas besoin d'avoir des blocs synchronisés lors de l'accès à ConcurrentHashMap dans une application multithread.

Pour obtenir toutes les paires clé-valeur dans ConcurrentHashMap, le code ci-dessous qui est similaire à votre code fonctionne parfaitement:

//Initialize ConcurrentHashMap instance
ConcurrentHashMap<String, Integer> m = new ConcurrentHashMap<String, Integer>();

//Print all values stored in ConcurrentHashMap instance
for each (Entry<String, Integer> e : m.entrySet()) {
  System.out.println(e.getKey()+"="+e.getValue());
}

Le code ci-dessus est raisonnablement valide dans un environnement multithread dans votre application. La raison, je dis "raisonnablement valide" est que, au-dessus du code fournit encore la sécurité des threads, il peut encore diminuer les performances de l'application.

J'espère que cela vous aidera.

0
Shishir Kumar