Java'da IdentityHashMap ve HashMap + Performans Karşılaştırması Arasındaki Fark Nedir?

Yayınlanan: 2021-10-19
kimlik-arasındaki fark-hashmap-ve-hashmap-performans-karşılaştırması

Bir süre önce, Harita Anahtarını equality operator (==) dayalı olarak karşılaştırmam gereken özel bir durumum var. Eşitlik operatörü (==), iki Anahtarın referanslarını (bellekteki adresleri) iki farklı sayı olarak karşılaştırır.

Öte yandan HashMap, anahtarın benzersizliğini equals() yöntemiyle karşılaştıran en çok kullanılan Java Collection Framework bileşenidir.

Ayrıca, IdentityHashMap , object.hashCode() hash kullanmaz, ancak System.identityHashCode(object) öğesini kullanır. IdentityHashMap'i, çalışma zamanı sırasında karma kodu değişen değiştirilebilir nesneler için kullanabiliriz.

on String Object için geçerli olan equals() ve == hakkında daha fazla bilgi edinmek istiyorsanız, şu öğreticiyi izleyin: https://crunchify.com/how-to-override-equals-and-hashcode-method-in-Java/.

Yukarıda equals() ve == davranışını gösteren Temel Test:

Sonuç:

Her iki Haritada da Performans Testi yapalım:

  1. Java Sınıfı Oluşturun: CrunchifyIdentityHashMapVsHashMapPerformance .java
  2. startCrunchifyTest()
    • Milyonlarca Rastgele Harita boyutu oluşturur
    • Örnekle ve başlat crunchifyString[] String Array nesnesi yukarıda oluşturulan metinle birlikte Rastgele Sayı ile: This is Crunchify's Test # number
  3. crunchifyCompareIdentityHashMapVsHashMap(String[] crunchifyString , Map<String, Integer> crunchifyMap , String name )
    • Gerekli tüm parametreleri bu yönteme iletin
    • crunchifyMap , IdentityHashMap / HashMap değerine sahip olacak
    • crunchifyString[] üzerinden yineleyin ve değerleri Harita'ya koyun - bu işlem biraz zaman alır
    • crunchifyString[] üzerinden yineleyin ve Haritadan değerler alın - bu işlem biraz zaman alır
    • Yukarıdaki işlemler için hangisinin daha iyi olduğunu karşılaştırabilmemiz için yukarıdaki her iki işlemin yürütme süresini öğreneceğiz? IdentityHashMap VEYA HashMap
    • Sonucun üstüne yazdır
  4. Yukarıdaki görevleri 2 ve 3 toplam 8 kez gerçekleştirin.

Sonuç:

Gözlem:

Sonuç olarak burada görebileceğiniz gibi, büyük haritalar için IdentityHashMap çok daha iyi performans gösteriyor. Niye ya? IdentityHashMap doesn't use equals() and hashcode() methods .

Bilginize:

Map'ten ve Map'e değer koymak ve almak için yaptığımız yukarıdaki işlemler çok CPU yoğun.

IdentityHashMap vs HashMap testi - CPU kullanımı