Überprüfen Sie das Vorhandensein eines HashMap-Schlüssels

9

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.

    
Sophie Sperner 09.02.2013, 13:01
quelle

4 Antworten

16

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:

%Vor%

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 )

%Vor%

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.

    
Dukeling 09.02.2013, 13:04
quelle
5

Tatsächlich sind beide Ansätze gleich. Wenn Sie in java.util.HashMap Quellcode suchen, finden Sie die nächste containsKey Realisierung:

%Vor%     
bsiamionau 09.02.2013 13:04
quelle
2

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.

    
dShringi 09.02.2013 13:10
quelle
1

Es gibt keinen Unterschied zwischen diesen beiden Ansätzen. Der Hauptunterschied ist nur, was Sie als nächstes tun werden. Wenn Sie den Wert dann benötigen, erhalten Sie natürlich den Wert.

    
kofemann 09.02.2013 13:30
quelle