Saya menemukan pertanyaan ini dalam sebuah tes dan ingin membaginya dengan Anda. Pertanyaannya adalah sebagai berikut: Ada dua variabel string x dan y. Kapan jika (x.equals(y) == true), apakah kedua string tersebut ada ? Implementasi kode hash yang berbeda, apakah penilaiannya benar? Jawaban: Salah, keduanya mempunyai nilai Kode Hash yang sama. Analisis: Pertanyaan ini terutama membahas metode akses objek String. Pertama, kita harus memperjelas apa nilai Kode hash dari variabel String? Keadaan objek String yang disimpan dalam memori disimpan dalam tabel hash. Ketika string yang berbeda dihasilkan, mereka akan sesuai dengan kode hash. Kode hash dari string diperoleh melalui metode hashCode(), yang mengembalikan hash dari string. Kodenya bertipe int. Kode hash objek String dihitung berdasarkan rumus berikut: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] Catatan: Gunakan algoritma int, dimana s[i] adalah karakter ke-i dari string, n adalah panjang string, dan ^ berarti eksponensial. (Nilai hash dari string kosong adalah 0.) Metode hashCode() dalam data tipe String mewarisi metode hashCode() di kelas Object, dan tujuan utamanya adalah untuk meningkatkan kinerja tabel hash (java.util.Hashtable) . Mengoptimalkan efisiensi akses. Ketika dua string deklarasi yang identik muncul, instance objek baru tidak akan dibuat ulang, tetapi kode hash yang ada akan dikembalikan dan diteruskan ke referensi yang sesuai. Mari kita perkenalkan kesepakatan umum HashCode, yang kira-kira sebagai berikut: Selama eksekusi aplikasi Java, ketika metode hashCode dipanggil pada objek yang sama dua kali, bilangan bulat yang sama harus dikembalikan secara konsisten, asalkan informasi yang digunakan saat membandingkan objek yang sama belum diubah. Bilangan bulat ini tidak harus tetap sama dari satu eksekusi aplikasi ke eksekusi lain dari aplikasi yang sama. Jika dua objek sama menurut metode sama dengan(Objek), (catatan: pertanyaan ini adalah contoh umum), maka bilangan bulat yang sama harus dihasilkan ketika metode hashCode() dipanggil pada masing-masing hasil dari dua objek. Jika kedua objek tidak sama menurut metode sama dengan(java.lang.Object), maka memanggil metode hashCode() pada salah satu objek tidak serta merta menghasilkan hasil bilangan bulat yang berbeda. Namun, dalam aplikasi praktis, menghasilkan hasil bilangan bulat yang berbeda untuk objek yang berbeda dapat meningkatkan kinerja tabel hash.
Artikel ini berasal dari blog CSDN. Harap sebutkan sumbernya saat mencetak ulang: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx
-