Impression de HashMap en Java

J’ai un HashMap:

private HashMap example= new HashMap(); 

Maintenant, je voudrais parcourir toutes les valeurs et les imprimer.

J’ai écrit ceci:

 for (TypeValue name: this.example.keySet()){ System.out.println(name); } 

Cela ne semble pas fonctionner.

Quel est le problème?

EDIT: Une autre question: cette collection est-elle basée sur zéro? Je veux dire si il a 1 clé et la valeur sera la taille 0 ou 1?

keySet () renvoie uniquement un ensemble de clés de votre hashmap, vous devez itérer cet ensemble de clés et obtenir la valeur du hashmap en utilisant ces clés.

Dans votre exemple, le type de la clé du TypeKey est TypeKey , mais vous avez spécifié TypeValue dans votre for-loop générique, il ne peut donc pas être compilé. Vous devriez le changer pour:

 for (TypeKey name: example.keySet()){ Ssortingng key =name.toSsortingng(); Ssortingng value = example.get(name).toSsortingng(); System.out.println(key + " " + value); } 

Si vous n’avez pas besoin d’imprimer la valeur de la clé et que vous avez simplement besoin de la valeur hashmap, vous pouvez utiliser les suggestions des autres.

Une autre question: cette collection est-elle à base zéro? Je veux dire si il a 1 clé et la valeur sera la taille 0 ou 1?

La collection renvoyée par keySet() est un ensemble. Vous ne pouvez pas obtenir la valeur d’un ensemble à l’aide d’un index. Il ne s’agit donc pas de savoir s’il est basé sur zéro ou basé sur un seul. Si votre hashmap a une clé, le keySet () retourné aura une entrée à l’intérieur et sa taille sera 1.

Une manière simple de voir les paires de valeurs clés:

 Map map = new HashMap<>(); map.put("a", 1); map.put("b", 2); System.out.println(Arrays.asList(map)); // method 1 System.out.println(Collections.singletonList(map)); // method 2 

La méthode 1 et la méthode 2 produisent toutes les deux ceci:

 [{b=2, a=1}] 

En supposant que vous ayez une Map , vous pouvez l’imprimer comme ceci:

 for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey()+" : "+entry.getValue()); } 

Vous avez plusieurs options

  • Obtenir map.values() , qui obtient les valeurs, pas les clés
  • Obtenez le map.entrySet() qui a les deux
  • Récupère le keySet() et pour chaque appel de clé map.get(key)

Pour imprimer à la fois la clé et la valeur, utilisez ce qui suit:

 for(Object objname:example.keySet()) { System.out.println(objname); System.out.println(example.get(objname); } 

Vous voulez que le jeu de valeurs, pas le jeu de clés:

 for (TypeValue name: this.example.values()) { System.out.println(name); } 

Le code que vous donnez ne comstackrait même pas, ce qui peut mériter d’être mentionné dans les prochaines questions – “ne semble pas fonctionner” est un peu vague!

Il convient de mentionner l’approche Java 8, en utilisant les fonctions BiConsumer et lambda:

 BiConsumer consumer = (o1, o2) -> System.out.println(o1 + ", " + o2); example.forEach(consumer); 

En supposant que vous avez remplacé la méthode toSsortingng des deux types si nécessaire.

Je l’ai fait en utilisant Ssortingng map (si vous travaillez avec Ssortingng Map).

 for (Object obj : dados.entrySet()) { Map.Entry entry = (Map.Entry) obj; System.out.print("Key: " + entry.getKey()); System.out.println(", Value: " + entry.getValue()); } 

Java 8 nouvelle fonctionnalité pour forEach style

 import java.util.HashMap; public class PrintMap { public static void main(Ssortingng[] args) { HashMap example = new HashMap<>(); example.put("a", 1); example.put("b", 2); example.put("c", 3); example.put("d", 5); example.forEach((key, value) -> System.out.println(key + " : " + value)); // Output: // a : 1 // b : 2 // c : 3 // d : 5 } } 

Une simple instruction d’impression avec le nom de la variable qui contient la référence de la carte de hachage ferait:

 HashMap HM = new HashMap<>(); //empty System.out.println(HM); //prints key value pairs enclosed in {} 

Cela fonctionne parce que la toSsortingng() est déjà remplacée dans la AbstractMap class qui est étendue par la HashMap Class Plus d’informations à partir de la documentation

Renvoie une représentation sous forme de chaîne de cette carte. La représentation sous forme de chaîne consiste en une liste de mappages de valeurs-clés dans l’ordre renvoyé par l’iterator de la vue entrySet de la carte, entre accolades (“{}”). Les mappages adjacents sont séparés par les caractères “,” (virgule et espace). Chaque mappage de valeur-clé est rendu comme la clé suivie d’un signe égal (“=”) suivi de la valeur associée. Les clés et les valeurs sont converties en chaînes comme par Ssortingng.valueOf (Object).

Si la carte contient une collection en tant que valeur, les autres réponses nécessitent un effort supplémentaire pour les convertir en chaînes, telles que Arrays.deepToSsortingng(value.toArray()) (s’il s’agit d’une carte de valeurs de liste), etc.

J’ai souvent rencontré ces problèmes et ObjectMappers la fonction générique pour imprimer tous les objects à l’aide d’ ObjectMappers . C’est très pratique à tous les endroits, surtout pendant les expériences, et je vous recommande de choisir cette façon.

 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; public static Ssortingng convertObjectAsSsortingng(Object object) { Ssortingng s = ""; ObjectMapper om = new ObjectMapper(); try { om.enable(SerializationFeature.INDENT_OUTPUT); s = om.writeValueAsSsortingng(object); } catch (Exception e) { log.error("error converting object to ssortingng - " + e); } return s; } 

Vous pouvez utiliser Entry classe Entry pour lire facilement HashMap .

 for(Map.Entry temp : example.entrySet()){ System.out.println(temp.getValue()); // Or something as per temp defination. can be used }