Der Quellcode von HashMap.values()
alsWie geben HashMap.values () und HashMap.keySet() Werte und Schlüssel zurück?
public Collection<V> values() {
Collection<V> vs = values;
return (vs != null ? vs : (values = new Values()));
}
Wie Sie sehen können, wenn die values()
Methode zunächst nur gibt ein Values
Objekt aufgerufen, es. Das Objekt Values
ist eine Unterklasse von AbstractCollection
ohne Konstruktor und enthält natürlich kein Element. Aber als ich die Methode anrief, gab es schnell eine Sammlung zurück
Collection<String> values = map.values();
System.out.println(values);
Das ist so komisch. Nicht nur values()
, sondern auch keySet()
und entrySet()
Methode solche leere Objekte zurückgeben. Also, hier ist meine Frage, wann und wie geben diese Methoden Objekte mit Elementen zurück, die wir brauchen?
'Beachten Sie, dass dies bedeutet, dass die empfangene Sammlung keine Kopie ist, sondern sich immer noch auf den ursprünglichen HashMap-Inhalt bezieht und sich daher ändert, wenn Sie die HashMap aktualisieren:' Das ist auch im Vertrag von 'Map.values () ', um Missverständnisse zu vermeiden. – biziclop
Eine innere Klasse ist eine nicht statische geschachtelte Klasse, d. H. Wäre die Klasse statisch gewesen, wäre sie keine innere Klasse, sondern einfach eine statische verschachtelte Klasse. https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html – Sardtok
@Sardtok: Danke für den Hinweis, ich habe nur die Antwort bearbeitet, um die offizielle Terminologie zu verwenden. – mastov