In Java muss eine HashMap vollständig mit Daten eines solchen Formulars gefüllt sein:
%Vor%Was ist schneller, wenn Sie die Existenz eines zufälligen Schlüssels überprüfen, sagen Sie 100:
%Vor%oder
%Vor%?
Die Frage ist aus der Sicht der Mikrooptimierung interessant.
Das containsKey
sollte sehr leicht langsamer sein, weil es zu einem zusätzlichen Funktionsaufruf führt (es ruft nur getEntry
auf) (es könnte optimiert werden, ich bin mir nicht sicher, ob Java das wird) tun Sie dies). containsKey
sieht folgendermaßen aus:
Beachten Sie jedoch, dass containsKey
andererseits auf anderen Map
-Implementierungen sehr leicht schneller sein kann (aber wahrscheinlich nicht in der Standard-Java-API).
Im Allgemeinen sehen meine Implementierungen so aus: (Vermeiden Sie containsKey
)
Das Folgende wäre definitiv langsamer als das oben genannte: (wenn die gesuchten Objekte einen angemessenen Zeitraum ausmachen)
%Vor% Bearbeiten: Danke an zvzdhk für die Quelle von containsKey
. Ich hätte eigentlich nachsehen sollen.
Tatsächlich sind beide Ansätze gleich. Wenn Sie in java.util.HashMap
Quellcode suchen, finden Sie die nächste containsKey Realisierung:
Die beiden unterscheiden sich nur in return
type, außer dass map.get(key)
Ihnen möglicherweise null
zurückgibt, wenn es ein Schlüssel ist, aber map.containsKey(key)
gibt Ihnen boolean
zurück, das verwendet werden könnte, um die zwei möglichen Fälle zu unterscheiden von map.get(key)
gibt null
zurück.
Tags und Links java hashmap micro-optimization containskey