Ich verwende eine linkedHashMap, um die Bestellung zu garantieren, wenn jemand versucht, darauf zuzugreifen. Wenn es jedoch an der Zeit ist, darüber zu iterieren, garantiert die Verwendung von entrySet () zur Rückgabe von Schlüssel / Wert-Paaren auch die Reihenfolge? Während der Iteration werden keine Änderungen vorgenommen.
BEARBEITEN: Gibt es auch nachteilige Auswirkungen beim Durchlaufen der Karte durch Durchlaufen der Schlüssel und Aufrufen von get?
java
linkedhashmap
Diego
quelle
quelle
Antworten:
Laut den Javadocs ja.
Nein, die Bearbeitung sollte einwandfrei funktionieren. Der Eintragssatz ist jedoch etwas schneller, da der Aufwand für das Nachschlagen aller Schlüssel in der Karte während der Iteration vermieden wird.
quelle
entrySet()
gibt er ein Set zurück. Laut Jpatrick können wir mit dem Iterator des Sets eine geordnete Liste erstellen, aber docs.oracle.com/javase/6/docs/api/java/util/Set.html#iterator () sagt: "Die Elemente werden in keiner bestimmten Reihenfolge zurückgegeben (es sei denn Dieses Set ist eine Instanz einer Klasse, die eine Garantie bietet. " Und keines der Dokumente, auf die hier verwiesen wird, besagt, dass entrySet () ein Set zurückgibt, das eine Instanz einer Klasse ist, die die Reihenfolge garantiert. Vermisse ich etwasentrySet().iterator()
ist ein plausibler Weg, aber kann man sich darauf verlassen?Map
quelle
Wenn Sie sicher sind, dass während der Iteration keine Änderungen vorgenommen werden, ist die ordnungsgemäße Bestellung mit
entrySet()
garantiert, wie in der API angegeben .quelle
entrySet()
haben, sagen nichts über die Gewährleistung einer ordnungsgemäßen Bestellung aus. Die einzige verwandte Aussage auf dieser Seite lautet: "Diese Klasse [dh HashMap] übernimmt keine Garantie für die Reihenfolge der Karte; insbesondere garantiert sie nicht, dass die Reihenfolge über die Zeit konstant bleibt." Worauf haben Sie sich mit diesem Link bezogen?