2016-04-12 2 views
-3
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")); 
    } 
} 
+4

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. –

+0

Was hast du erwartet? 'new String (" identityKey ")! =" identityKey "'. –

Antwort

1

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.

0

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).