equals() digunakan untuk membandingkan isi objek, sedangkan hashCode() digunakan untuk memverifikasi identitas objek. Saat mendefinisikan ulang metode-metode ini, sebaiknya keduanya digunakan bersamaan untuk menjaga konsistensi perbandingan kesamaan dan kode hash.
Struktur data hash memanfaatkan hashCode() untuk menentukan identitas objek. Dengan mendefinisikan ulang equals() dan hashCode(), kita dapat mencegah terjadinya tabrakan kode hash dan kesalahan.
Penggunaan equals() dan hashCode() yang tepat sangat penting untuk meningkatkan efisiensi dan akurasi saat membandingkan objek dan menggunakan struktur data berbasis hash.
equals()
equals() membandingkan apakah konten objek sama. Sering disebut sebagai perbandingan kesetaraan, dan jika equals() tidak ditimpa, secara internal sama dengan == sehingga menjadi perbandingan identitas. Oleh karena itu, jika Anda ingin membandingkan kesetaraan objek dengan benar, Anda harus selalu menggunakan equals().
hashCode()
hashCode() memeriksa apakah dua objek adalah objek yang sama. Ini memiliki fungsi perbandingan identitas yang sama dengan ==, tetapi metode hashCode() mengembalikan nilai integer unik dari objek saat runtime. Umumnya, mengembalikan alamat memori objek yang disimpan di Heap.
Metode ini memiliki kata kunci native, yang digunakan saat menggunakan bahasa yang dikembangkan di luar Java di Java.
Apa itu Hash?
Hashing adalah proses menggunakan fungsi hash untuk menghasilkan nilai output dengan ukuran tetap dari nilai input dengan ukuran variabel. Nilai yang diperoleh melalui hashing disebut hash code.
equals() dan hashCode()
Karena objek yang sama harus memiliki alamat memori yang sama, sudah jelas bahwa objek yang sama harus memiliki hash code yang sama. Oleh karena itu, disarankan untuk menulis kode yang menjamin hash code yang sama dengan menimpali hashCode() serta equals().
Struktur Data Hash
Mari kita coba memasukkan 2 objek yang setara ke dalam struktur data HashSet seperti di atas. Jika kita mencetak ukuran Set tersebut, hasilnya akan menjadi 2. Mengapa demikian?
Ini karena struktur data yang menggunakan hash menggunakan hashCode() untuk menentukan Key. Artinya, sebelum membandingkan apakah objeknya sama, ia membandingkan apakah hash code dari kedua objek tersebut sama, lalu memutuskan apakah kedua objek tersebut setara. Pada saat ini, jika hashCode() tidak ditimpa, hashCode() dari Object akan digunakan, sehingga alamat memori tempat setiap objek disimpan akan dikembalikan. Oleh karena itu, sebaiknya timpa hashCode() selain equals() untuk kasus penggunaan struktur data hash.
Mengapa equals() dan hashCode() digunakan bersama-sama?
Ini karena struktur data yang menggunakan hash menggunakan hashCode() untuk menentukan Key. Artinya, sebelum membandingkan apakah objeknya sama, ia membandingkan apakah hash code dari kedua objek tersebut sama, lalu memutuskan apakah kedua objek tersebut setara. Pada saat ini, jika hashCode() tidak ditimpa, hashCode() dari Object akan digunakan, sehingga alamat memori tempat setiap objek disimpan akan dikembalikan. Oleh karena itu, sebaiknya timpa hashCode() selain equals() untuk kasus penggunaan struktur data hash.