Di Jawa Apa Perbedaan Antara IdentityHashMap dan HashMap + Perbandingan Kinerja

Diterbitkan: 2021-10-19
perbedaan-antara-identitashashmap-and-hashmap-performance-comparison

Beberapa waktu yang lalu saya memiliki kasus khusus di mana saya harus membandingkan Map's Key berdasarkan equality operator (==) . Operator kesetaraan (==) membandingkan referensi (alamat dalam memori) dari dua Kunci sebagai dua angka yang berbeda.

Di sisi lain, HashMap adalah komponen Java Collection Framework yang paling banyak digunakan yang membandingkan keunikan Kunci dengan bantuan metode equals() .

Juga, IdentityHashMap tidak menggunakan hash dari object.hashCode() tetapi menggunakan System.identityHashCode(object) . Kita bisa menggunakan IdentityHashMap untuk objek yang bisa berubah yang kode hashnya berubah selama runtime.

Jika Anda ingin mempelajari lebih lanjut tentang equals() dan == yang berlaku on String Object , ikuti tutorial ini: https://crunchify.com/how-to-override-equals-and-hashcode-method-in-java/.

Tes Dasar yang menunjukkan perilaku equals() dan == di atas:

Hasil:

Mari kita lakukan Performance Testing di kedua Maps:

  1. Buat Kelas Java: CrunchifyIdentityHashMapVsHashMapPerformance .java
  2. startCrunchifyTest()
    • Menghasilkan ukuran Peta Acak dalam jutaan
    • Instansiasi dan Inisialisasi crunchifyString[] String Array objek dengan Angka Acak yang dihasilkan di atas dengan teks: This is Crunchify's Test # number
  3. crunchifyCompareIdentityHashMapVsHashMap(String[] crunchifyString , Map<String, Integer> crunchifyMap , String name )
    • Lewati semua parameter yang diperlukan ke metode ini
    • crunchifyMap akan memiliki nilai IdentityHashMap / HashMap
    • Ulangi melalui crunchifyString[] dan masukkan nilai ke Peta — operasi ini membutuhkan waktu
    • Ulangi melalui crunchifyString[] dan dapatkan nilai dari Peta — operasi ini membutuhkan waktu
    • Kami akan mengetahui waktu eksekusi untuk kedua operasi di atas sehingga kami dapat membandingkan mana yang lebih baik untuk operasi di atas? IdentityHashMap ATAU HashMap
    • Cetak hasil di atas
  4. Lakukan tugas di atas 2 dan 3 total 8 kali.

Hasil:

Pengamatan:

Seperti yang Anda lihat di sini sebagai hasilnya, untuk peta besar, IdentityHashMap berkinerja jauh lebih baik. Mengapa? IdentityHashMap doesn't use equals() and hashcode() methods , yang dianggap sangat mahal.

Sekedar informasi:

Operasi di atas yang kami lakukan untuk menempatkan dan mendapatkan nilai dari dan ke dalam Peta sangat membutuhkan CPU.

Tes IdentityHashMap vs HashMap - penggunaan CPU