private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Nun 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: Ist diese Sammlung nullbasiert? Ich meine, wenn es 1 Schlüssel und Wert hat, wird die Größe 0 oder 1 sein?
Ich empfehle Ihnen, sich mit der Java-Dokumentation vertraut zu machen (sie beantwortet viele Ihrer Fragen). Dies ist zum Beispiel die Dokumentation für Map‘S size() Methode: “Gibt die Anzahl der Schlüssel-Wert-Zuordnungen in dieser Karte zurück. Wenn die Karte mehr als . enthält Integer.MAX_VALUE Elemente, Renditen Integer.MAX_VALUE.”
– Adam Paynter
7. Mai ’11 um 9:18
Ihr Code sucht nach Werten in Schlüsseln – was nicht korrekt ist. Suchen Sie entweder nach dem Schlüssel in den Schlüsseln oder nach dem Wert in den Werten
– d-leben
7. Mai ’11 um 9:52
Wenn es 1 Schlüssel / Wert hat, hat es natürlich die Größe 1. Aber das hat nichts mit nullbasierter Indizierung zu tun.
– Jesper
7. Mai ’11 um 11:59
Dies ist eine gute Frage. Aber es gibt hier eine Antwort, die dies in einer Zeile tun kann, wenn Sie die Lösung von Mingfei sehen.
– HoldOffHunger
4. Juni ’17 um 22:47
Ken Chan
keySet() nur einen Satz von Schlüsseln aus Ihrer Hash-Map zurückgibt, sollten Sie diesen Schlüsselsatz iterieren und den Wert aus der Hash-Map mit diesen Schlüsseln abrufen.
In Ihrem Beispiel ist der Typ des Schlüssels der Hash-Map TypeKey, aber du hast angegeben TypeValue in deinem generischen for-loop, kann also nicht kompiliert werden. Sie sollten es ändern in:
for (TypeKey name: example.keySet()) {
String key = name.toString();
String value = example.get(name).toString();
System.out.println(key + " " + value);
}
Wenn Sie keinen Schlüsselwert ausgeben müssen und nur den Hashmap-Wert benötigen, können Sie die Vorschläge anderer verwenden.
Eine andere Frage: Ist diese Sammlung nullbasiert? Ich meine, wenn es 1 Schlüssel und Wert hat, wird es dann 0 oder 1 sein?
Die Sammlung ist zurückgekommen von keySet() ist ein Set. Sie können den Wert nicht mit einem Index aus einer Menge abrufen, daher ist es nicht die Frage, ob er nullbasiert oder einsbasiert ist. Wenn Ihre Hash-Map einen Schlüssel hat, ist der keySet() zurückgegeben wird einen Eintrag enthalten und seine Größe ist 1.
Oder noch besser: for (Map.Entry<String, String> entry : map.entrySet()) { ... }
– Adam Paynter
7. Mai ’11 um 9:15
Oder noch kompakter: example.forEach((key, value) -> System.out.println("key + " | " + value));
– Younes El Ouarti
21. April ’20 bei 6:47
Was ist “Eintrag”, ist das ein Verweis auf etwas oder ein Befehlswort?
– Al Grant
21. Juni ’21 um 19:44
Mingfei
Eine einfache Möglichkeit, die Schlüssel-Wert-Paare anzuzeigen:
Sowohl Methode 1 als auch Methode 2 geben dies aus:
[{b=2, a=1}]
Gehen Sie einfach wie folgt vor: System.out.println(map);, Ausgang: {b=2, a=1}
– Mingfei
20. Okt. 17 um 1:25 Uhr
Ja… noch eine ähnliche Ausgabe: System.out.println(map.toString());
– Yo Apps
23. Januar ’19 um 13:56 Uhr
@yoapps hüte dich in diesem Fall vor NPE. Deshalb vermeide ich die .toString wenn möglich.
– Maroun
3. August ’19 um 8:38
Das stimmt. die NPE lauert immer in solchen Abkürzungen. Ich wollte nur eine ähnliche Ausgabe zeigen. Ich denke, vor allem, wenn Sie ein Protokoll / eine Konsole debuggen und nur einen Blick in eine Karte werfen möchten, deren Daten Sie wissen, dass sie nicht null sind. Das ist ein schnelles Feuer! Aber wenn der Code von Grund auf überprüft wird … dann haben Sie Recht, er ist knifflig und sollte in einem guten Programmierkontext vermieden werden!
– Yo Apps
6. August ’19 um 8:13
Angenommen, Sie haben eine Map<KeyType, ValueType>, können Sie es wie folgt ausdrucken:
Für mich hat diese einfache Zeile gut funktioniert:
Arrays.toString(map.entrySet().toArray())
davmac
Sie möchten den Wertesatz, nicht den Schlüsselsatz:
for (TypeValue name: this.example.values()) {
System.out.println(name);
}
Der Code, den Sie angeben, würde nicht einmal kompiliert, was in zukünftigen Fragen erwähnenswert sein könnte – “scheint nicht zu funktionieren” ist ein bisschen vage!
Ich empfehle Ihnen, sich mit der Java-Dokumentation vertraut zu machen (sie beantwortet viele Ihrer Fragen). Dies ist zum Beispiel die Dokumentation für
Map
‘Ssize()
Methode: “Gibt die Anzahl der Schlüssel-Wert-Zuordnungen in dieser Karte zurück. Wenn die Karte mehr als . enthältInteger.MAX_VALUE
Elemente, RenditenInteger.MAX_VALUE
.”– Adam Paynter
7. Mai ’11 um 9:18
Ihr Code sucht nach Werten in Schlüsseln – was nicht korrekt ist. Suchen Sie entweder nach dem Schlüssel in den Schlüsseln oder nach dem Wert in den Werten
– d-leben
7. Mai ’11 um 9:52
Wenn es 1 Schlüssel / Wert hat, hat es natürlich die Größe 1. Aber das hat nichts mit nullbasierter Indizierung zu tun.
– Jesper
7. Mai ’11 um 11:59
Dies ist eine gute Frage. Aber es gibt hier eine Antwort, die dies in einer Zeile tun kann, wenn Sie die Lösung von Mingfei sehen.
– HoldOffHunger
4. Juni ’17 um 22:47