Rumah  >  Artikel  >  Java  >  Bagaimanakah Mengatasi `hashCode()` dan `equals()` Memberi Impak Prestasi HashMap?

Bagaimanakah Mengatasi `hashCode()` dan `equals()` Memberi Impak Prestasi HashMap?

Susan Sarandon
Susan Sarandonasal
2024-11-01 17:51:02789semak imbas

How Does Overriding `hashCode()` and `equals()` Impact HashMap Performance?

Memahami cara equals dan hashCode berfungsi dalam HashMap

HashMap dalam Java menggunakan gabungan kaedah hashCode() dan equals() untuk menyimpan dan mendapatkan nilai kunci dengan cekap berpasangan. Apabila menambah pasangan nilai kunci baharu, kaedah hashCode() kunci dikira untuk menentukan baldi cincang di mana entri akan diletakkan. Kaedah equals() kemudiannya digunakan untuk menyemak kunci pendua dalam baldi yang dipilih.

Dalam kod ujian yang diberikan, kelas ToDos mentakrifkan pelaksanaan primitif equals(), memastikan objek dengan medan hari yang sama akan dianggap sama. Apabila baris // public int hashCode() { return 9; } tidak dikomen, semua objek ToDos, tanpa mengira medan hari mereka, terpaksa mengembalikan nilai hashCode() yang sama. Akibatnya, semua objek ToDos dipetakan ke baldi cincang yang sama, tanpa mengira medan harinya.

Apabila kaedah map.size() digunakan dengan baris yang dikomen keluar, objek ToDos dengan hari yang berbeza medan (t1, t2, t3) diletakkan dalam baldi cincang yang berbeza kerana nilai kod cincang() yang berbeza. Akibatnya, map.size() mengembalikan kiraan tiga dengan tepat.

Sebaliknya, apabila baris tidak dikomen, objek ToDos semuanya dipetakan ke baldi cincang yang sama, dengan kaedah map.size() kemudiannya kembali kiraan dua. Ini kerana HashMap menganggap semua objek ToDos "setara secara logik" kerana ia mengembalikan nilai hashCode() yang sama.

Ringkasnya, penggunaan kaedah hashCode() dan equals() ialah penting untuk operasi cekap HashMap. Dengan mengetepikan kaedah hashCode() sahaja, adalah penting untuk memastikan bahawa kunci setara secara logik menjana nilai hashCode() yang konsisten. Mengatasi hanya kaedah equals() boleh membawa kepada isu prestasi disebabkan peningkatan bilangan perbandingan yang diperlukan untuk menentukan kesetaraan logik. Mencapai keseimbangan yang betul antara pencincangan yang cekap melalui hashCode() dan memastikan kesamaan objek melalui equals() adalah kunci kepada penggunaan HashMap yang optimum.

Atas ialah kandungan terperinci Bagaimanakah Mengatasi `hashCode()` dan `equals()` Memberi Impak Prestasi HashMap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn