16 Haziran 2020 Salı

IdentityHashMap Sınıfı

Giriş
Map arayüzünü gerçekleştirir. Açıklaması şöyle.
This class implements the Map interface with a hash table, using reference-equality in place of object-equality when comparing keys (and values). In other words, in an IdentityHashMap, two keys k1 and k2 are considered equal if and only if (k1==k2). (In normal Map implementations (like HashMap) two keys k1 and k2 are considered equal if and only if (k1==null ? k2==null : k1.equals(k2)).)
Key nesneleri bulmak için "identity" kullanılır. k1.equals (k2) yerine reference equality yani k1 == k2 yöntemini kullanır

Aslında bu sınıf nadir kullanılır ve Map arayüzünü bazı yerlerde bozar. Açıklaması şöyle.
This class is not a general-purpose Map implementation! While this class implements the Map interface, it intentionally violates Map's general contract, which mandates the use of the equals method when comparing objects. This class is designed for use only in the rare cases wherein reference-equality semantics are required.
constructor
Şöyle yaparız.
IdentityHashMap map = new IdentityHashMap();
put metoud
Şöyle yaparız.
map.put("A", new String("B"));
remove metodu
Key ve Value nesneleri belirtilen değerler ile aynı ise siler. Şöyle yaparız.
map.remove("A", new String("B")
Diğer
Set olarak kullanımı için şöyle yaparız. En son eklenmeye çalışılan p nesnesi eklenmez. Burada ayrıca Person nesnesinin hashCode() ve equals() metodlarını override etmesine gerek olmadığını da görürüz.
// get IdentytitySet wich wrap IdentityHashMap
Set<Person> set = Collections.newSetFromMap( new IdentityHashMap<>() ) 
//test 
Person p  = new Person("a",1);
Person p2 = new Person("a",1);
set.add(p);
set.add(p2);
p.setD(999999999);
set.add(p);//add Person with changed "d" to 999999999
System.out.println(set.toString());
Çıktı olarak şunu alırız.
[
  Person{
    s=StringProperty [value: a],
    d=DoubleProperty [value:9.99999999E8]
  }, 
  Person{
    s=StringProperty [value: a], 
    d=DoubleProperty [value: 1.0]
  }
]

Hiç yorum yok:

Yorum Gönder