import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;
public class IdentityHashMapExample {
public static void main(String args[]){
// Created HashMap and IdentityHashMap objects
Map hashmapObject = new HashMap();
Map identityObject = new IdentityHashMap();
// Putting keys and values in HashMap and IdentityHashMap Object
hashmapObject.put(new String("key") ,"Google");
hashmapObject.put(new String("key") ,"Facebook");
identityObject.put(new String("identityKey") ,"Google");
identityObject.put(new String("identityKey") ,"Facebook");
// Print HashMap and IdentityHashMap Size : After adding keys
System.out.println("HashMap after adding key :"+ hashmapObject);
System.out.println("Getting value from HashMap :"+ hashmapObject.get("key"));
System.out.println("IdentityHashMap after adding key :"+ identityObject);
// why get(key) method return the null value in case of identityHash Map
System.out.println("Getting value from IdentityHashMap :" + identityObject.get("identityKey"));
}
}
Antwort
Vom javadoc von IdentityHashMap in diesem Wok: mit einer Hash-Tabelle
Diese Klasse implementiert die Schnittstelle Map, Referenz-Gleichheit anstelle der Verwendung von Objektgleichheit beim Vergleich der Schlüssel (und Werte). Mit anderen Worten, in einer IdentityHashMap werden zwei Schlüssel k1 und k2 genau dann als gleich betrachtet, wenn (k1 == k2). (Im Normal Karte Implementierungen (wie HashMap) zwei Tasten K1 und K2 gleich betrachtet , wenn und nur wenn (k1 == null k2 == null: k1.equals (k2)).)
So Wenn Sie versuchen, den Wert unter Verwendung der gleichen Schlüsselreferenz, mit der der Wert eingefügt wurde, abzurufen, erhalten Sie den Wert. Wenn Sie jedoch versuchen, einen Wert mithilfe der Differenzschlüsselreferenz zu erhalten (auch wenn sie gleich ist), erhalten Sie null.
Für IdentityHashMap Schlüssel verglichen, um den '==' Operator während in HashMap ist es mit equals getan(). Wenn Sie einen neuen String ("Schlüssel") tun, ist es immer ein neues Objekt in
Heap-Speicher
erstellen. Auf der anderen Seite, wenn Sie ein Objekt mit String-Literalsyntax erstellen, z. "Schlüssel" kann es ein bestehendes Objekt aus
String Pool
oder erstellen Sie einen im Pool zurück. Also mit equals() sind beide identisch, da es den Inhalt vergleicht, aber '==' vergleicht Referenzen, die in beiden Fällen unterschiedlich sind (daher ist es nicht möglich, das Objekt im Falle von IdentityHashMap zu bekommen).
- 1. C# entspricht Java IdentityHashMap
- 2. Anwendungsfälle für IdentityHashMap
- 3. Methoden in PhpStorm nach oben/unten verschieben
- 4. Swift Wörterbuch Get Key für Werte
- 5. Composite Key v/s 2 Ebenen der Indirektion
- 6. , wie diese Situation kommen
- 7. Get div scroll unten - 220 jquery
- 8. Get ausführbare (.exe) Methoden pwershell
- 9. Get Windows Benutzername - verschiedene Methoden
- 10. Datenbank-Import-Situation
- 11. PHP Assoziatives Array. Get key value pair mit foreach
- 12. Detect Key nicht in Key Enum, in Key Ereignis
- 13. Hoptoad v. Außergewöhnlich v. Exception_notification v. Exception_logger
- 14. Was überprüft 'v! == v'?
- 15. Get und Post-Methoden mit anderen Namen
- 16. Gruppe Funken von Key (Key, List) Pair
- 17. Restlet mit Methoden GET und POST
- 18. Unterschied zwischen GET und POST Methoden?
- 19. get() Methoden in Java enum Typ
- 20. Unterschied zwischen Djangos filter() und get() Methoden
- 21. Wie funktioniert [v.abs, -v]?
- 22. Get key code/click/welche ausgelöste Änderung Ereignis
- 23. Android: Get Key drücken, Tastenfreigabe Ereignisse außerhalb der Aktivität Bildschirm
- 24. Erweiterte AlarmManager Situation
- 25. Emacs regexp ersetzen Situation
- 26. MATLAB Integration Situation
- 27. Speicherverlust Situation in iphone
- 28. UILabel Anzahl Situation
- 29. SyntaxError: Unerwartetes Token V
- 30. am nächsten Wert von Array Get nach oben oder unten
Willkommen bei Stack Overflow. Bitte nehmen Sie sich etwas Zeit, um Ihren Code neu zu formatieren - verwenden Sie die Vorschau, um zu prüfen, ob er so aussieht, wie Sie es erwarten - und schreiben Sie Ihre Beschreibung * außerhalb * des Codes. –
Was hast du erwartet? 'new String (" identityKey ")! =" identityKey "'. –