2016-04-21 25 views
1

Wie drucke ich Informationen aus einer Karte, die das Objekt als Wert hat?Eine Java Map drucken Map <String, Object> - Wie?

Ich habe die folgende Karte erstellt:

Map<String, Object> objectSet = new HashMap<>(); 

Das Objekt seine eigene Klasse mit einer eigenen Instanzvariablen hat

ich mit Daten, die die oben Karte bereits ausgefüllt haben.

Ich habe eine printMap Methode erstellt, aber ich kann nur scheinen die Schlüssel der Karte

Wie drucke ich die Karte, um die <Object> Werte zu drucken zu tun bekommen eine für jede Schleife verwenden?

Bisher habe ich bekam:

for (String keys : objectSet.keySet()) 
{ 
    System.out.println(keys); 
} 

Die oben druckt die Tasten. Ich möchte die Objektvariablen auch ausdrucken können.

+3

Hat 'Map' nur eine' keySet' Methode? Hat es keine anderen Methoden? – Savior

+1

Haben Sie gerade 'println (map)' versucht? – chrylis

Antwort

3

können Sie Map.entrySet() Methode verwenden:

for (Map.Entry entry : objectSet.entrySet()) 
{ 
    System.out.println("key: " + entry.getKey() + "; value: " + entry.getValue()); 
} 
0

Es gibt eine get Methode in HashMap:

for (String keys : objectSet.keySet()) 
{ 
    System.out.println(keys + ":"+ objectSet.get(keys)); 
} 
+0

Ich wäre vorsichtig bei der Verwendung dieses Ansatzes für zeitkritische Anwendungen, da intern get Methode [linear Suche O (n)] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk /openjdk/8u40-b25/java/util/HashMap.java#HashMap.getNode%28int%2Cjava.lang.Object%29) für den entsprechenden Wert. –

+1

Die get-Methode führt intern einen Aufruf von getNode (Hash (Schlüssel), Schlüssel) aus, der Hashing verwendet. Es wird nur dann linear gesucht, wenn eine Hash-Kollision vorliegt. – randominstanceOfLivingThing

9

Ich bin sicher, dass einige schöne Bibliothek gibt es, die diese Art der Sache für Sie schon der Fall ist. .. Aber um nur mit dem Ansatz zu bleiben, mit dem Sie bereits gehen, Map#entrySet gibt Ihnen eine kombinierte Object mit der keyund die value. So etwas wie:

for (Map.Entry<String, Object> entry : map.entrySet()) { 
    System.out.println(entry.getKey() + ":" + entry.getValue().toString()); 
} 

wird tun, was Sie wollen.


Wenn Sie Java 8 verwenden, gibt es auch den neuen Streaming-Ansatz.

map.forEach((key, value) -> System.out.println(key + ":" + value)); 
Verwandte Themen