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? ; -)
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:
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.
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.
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.
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!