Ich habe eine HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Jetzt möchte ich alle Werte durchgehen und ausdrucken.
Ich habe das geschrieben:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
Es scheint nicht zu funktionieren.
Was ist das Problem?
EDIT: Eine andere Frage: Basiert diese Sammlung auf Null? Ich meine, wenn es 1 Schlüssel und Wert hat, wird die Größe 0 oder 1 sein?
java
collections
Unbekannter Benutzer
quelle
quelle
Map
diesize()
Methode : "Gibt die Anzahl der Schlüsselwertzuordnungen in dieser Zuordnung zurück. Wenn die Zuordnung mehr alsInteger.MAX_VALUE
Elemente enthält , wird zurückgegebenInteger.MAX_VALUE
."Antworten:
keySet () gibt nur einen Satz von Schlüsseln aus Ihrer Hashmap zurück. Sie sollten diesen Schlüsselsatz iterieren und den Wert aus der Hashmap mit diesen Schlüsseln abrufen.
In Ihrem Beispiel ist der Typ des Hashmap-Schlüssels
TypeKey
, aber Sie haben ihnTypeValue
in Ihrer generischen for-Schleife angegeben, sodass er nicht kompiliert werden kann. Sie sollten es ändern in:Update für Java8:
Wenn Sie keinen Schlüsselwert drucken müssen und nur den Hashmap-Wert benötigen, können Sie die Vorschläge anderer verwenden.
Die Sammlung, von der zurückgegeben wird,
keySet()
ist eine Menge. Sie können den Wert einer Menge nicht mithilfe eines Index abrufen, sodass es nicht darum geht, ob er auf Null oder auf Eins basiert. Wenn Ihre Hashmap einen Schlüssel hat, enthält das zurückgegebene keySet () einen Eintrag und seine Größe ist 1.quelle
for (Map.Entry<String, String> entry : map.entrySet()) { ... }
example.forEach((key, value) -> System.out.println("key + " | " + value));
Eine einfache Möglichkeit, die Schlüsselwertpaare anzuzeigen:
Sowohl Methode 1 als auch Methode 2 geben Folgendes aus:
quelle
System.out.println(map);
{b=2, a=1}
System.out.println(map.toString());
.toString
wenn möglich.Angenommen, Sie haben eine
Map<KeyType, ValueType>
, können Sie sie wie folgt drucken:quelle
Verwenden Sie Folgendes, um Schlüssel und Wert zu drucken:
quelle
Sie haben mehrere Möglichkeiten
map.values()
, das die Werte erhält, nicht die Schlüsselmap.entrySet()
was beides hatkeySet()
und für jeden Tastenanrufmap.get(key)
quelle
Sie möchten den Wertesatz, nicht den Schlüsselsatz:
Der Code, den Sie geben, würde nicht einmal kompiliert, was in zukünftigen Fragen erwähnenswert sein könnte - "scheint nicht zu funktionieren" ist etwas vage!
quelle
Erwähnenswert ist der Java 8-Ansatz mit
BiConsumer
und Lambda-Funktionen:Angenommen, Sie haben die
toString
Methode der beiden Typen bei Bedarf überschrieben .quelle
Für mich hat diese einfache Zeile gut funktioniert:
quelle
Eine einfache Druckanweisung mit dem Variablennamen, der die Referenz der Hash-Map enthält, würde Folgendes bewirken:
Dies funktioniert, weil die
toString()
Methode bereits überschrieben ist,AbstractMap class
was durch dieHashMap Class
Weitere Informationen aus der Dokumentation erweitert wirdquelle
Java 8 neuer Feature-
forEach
Stilquelle
Ich habe es mit String Map gemacht (wenn Sie mit String Map arbeiten).
quelle
Verwenden von Java 8-Funktionen
quelle
Nützlich, um Einträge in einer HashMap schnell zu drucken
quelle
Wenn die Karte eine Sammlung als Wert enthält, erfordern die anderen Antworten zusätzlichen Aufwand, um sie als Zeichenfolgen zu konvertieren, z. B.
Arrays.deepToString(value.toArray())
(wenn es sich um eine Karte mit Listenwerten handelt) usw.Ich war ziemlich oft mit diesen Problemen konfrontiert und stieß auf die generische Funktion zum Drucken aller Objekte mit
ObjectMappers
. Dies ist an allen Orten sehr praktisch, insbesondere beim Experimentieren, und ich würde Ihnen empfehlen, diesen Weg zu wählen.quelle
Sie können
Entry
Klasse verwenden, umHashMap
leicht zu lesen .quelle