HashMap.containsValue - Was ist der Sinn?

8

Ich habe eine HashMap und ich muss ein Item nach seinem Ganzzahlwert holen. Ich bemerke, dass es eine Funktion containsValue () gibt, aber es scheint, dass ich immer noch durch die Karte iterieren muss, um den richtigen Index zu finden.

Meine Frage ist; Warum benutze ich containsValue () wenn ich es später durchlaufen muss?

Vermisse ich auch den Punkt vollständig? ; -)

    
Frederik 29.03.2010, 13:03
quelle

6 Antworten

7

Eine Karte ordnet einem Wert einen Schlüssel zu. Wenn Sie einen Wert haben und Sie wissen, dass die Karte diesen Wert enthält, warum brauchen Sie den Schlüssel mehr?

Wenn Sie andererseits den Schlüssel wirklich benötigen oder nur eine Eigenschaft des Werts haben, können Sie entrySet() iterieren, den Wert überprüfen und den Schlüssel zurückgeben, falls er gefunden wurde:

%Vor%     
Arne Burmeister 29.03.2010, 13:15
quelle
5

Eine Karte ist ein Schlüssel zu Wertspeicher. Das Sagen eines Wertes ist nur als Hinweis angegeben. Ich denke, um den bijektiven Link zu haben, der es Ihnen ermöglicht, Schlüssel von Wert zu erhalten, müssen Sie sich auf Dinge wie BiMap von Google-Sammlungen

    
Riduidel 29.03.2010 13:08
quelle
3

Eine HashMap (oder Map im Allgemeinen) verwendet Schlüssel / Wert-Paare. Wenn Sie etwas zur Karte hinzufügen, müssen Sie einen Schlüssel angeben, und dieser Schlüssel wird später beim Abrufen des Werts erneut verwendet. Basierend auf der Implementierung der HashMap wird bei gegebenem Schlüssel ein Wert in O (1) -Zeit abgerufen.

containsValue ist eine nützliche Methode, um zu überprüfen, ob eine HashMap den Wert enthält, nach dem Sie suchen, aber ich verstehe nicht, warum Sie das verwenden, um den gesuchten Wert abzurufen.

Der richtige Weg, um eine Karte zu verwenden, wäre etwa:

%Vor%

Jetzt können Sie Ihre Objekte auf folgende Weise erhalten:

%Vor%

Wenn Sie es getan haben:

myMap.containsValue (1);

Dies würde false zurückgeben, da 1 der Schlüssel und nicht der Wert ist. Sie könnten tun:

%Vor%

wenn Sie nur wissen wollen, ob es existiert, aber es gibt kein Problem beim Aufruf:

%Vor%

würde nur null zurückgeben, wenn es keinen Schlüssel 99 gäbe.

Im Grunde ist der Punkt, Sie haben Recht, es macht keinen Sinn, containsValue zu verwenden, wenn Sie versuchen, den Wert abzurufen. Verwenden Sie get oder containsKey, wenn Sie zuerst nach dem Vorhandensein suchen möchten.

    
DaveJohnston 29.03.2010 13:14
quelle
2

Sie müssen es danach nicht mehr durchlaufen. containsValue() ist hilfreich in Situationen, in denen Sie nicht genau wissen müssen, wo der Wert liegt, sondern nur, wenn Sie nur wissen müssen, ob es sich bereits in der Map befindet. In Situationen, in denen Sie genau wissen müssen, wo in der Map der Wert liegt, verwenden Sie nicht containsValue() - springen Sie direkt zum Iterator und finden Sie ihn.

    
Jim Kiley 29.03.2010 13:11
quelle
1

Sie können containsValue () in Fällen verwenden, in denen Sie nicht die gesamte hashmap durchlaufen müssen, zum Beispiel wenn Sie ein Schlüssel-Wert-Paar zu hashmap hinzufügen wollen, aber vorher wissen möchten, ob dieser Wert in hashmap steht . In diesem Fall müssen Sie für die Additionsoperation nicht die gesamte Hashmap durchlaufen.

    
sanjuro 29.03.2010 13:10
quelle
0

Lassen Sie mich diese Frage für Frederik neu formulieren:

Nun, containsValue (), vergleicht es intern (seinen Eingabeparameter) mit jedem "Wert" in der Hashmap? Oder nutzt es irgendwie Hashcoding (oder eine andere Technik), um das Ergebnis zu generieren? Für den ersten Fall könnten wir einfach einen Iterator verwenden, um die Existenz unseres Wertes mit dem "Wert" der Hashmappe zu vergleichen. Die Bedeutung der Frage liegt in der Leistung oder Geschwindigkeit!

    
Vivek Vardhan 21.09.2016 11:25
quelle

Tags und Links