Mengapa Java's hashCode() dalam String Menggunakan 31 sebagai Pengganda
Di Java, kaedah hashCode() untuk objek String menggunakan yang berikut formula:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
di mana s[i] ialah watak ke-i, n ialah panjang rentetan, dan ^ menandakan eksponen. Ini menimbulkan persoalan: mengapa 31 dipilih secara khusus sebagai pengganda?
Rasional untuk Pengganda Perdana
Dokumentasi mencadangkan menggunakan nombor perdana yang agak besar sebagai pengganda kepada meminimumkan perlanggaran dalam jadual cincang. Perlanggaran berlaku apabila objek berbeza menghasilkan kod cincang yang sama, yang berpotensi membawa kepada isu prestasi. Nombor perdana menawarkan pengedaran kod cincang yang lebih baik, mengurangkan kemungkinan perlanggaran.
Mengapa Bukan Perdana Lain?
Pemilihan 31 antara nombor prima lain dikaitkan dengan dua faktor:
Oleh itu, 31 memenuhi kedua-dua kriteria sebagai nombor perdana untuk mengelakkan perlanggaran sambil mendayakan operasi pencincangan yang cekap untuk objek String di Java.
Atas ialah kandungan terperinci Mengapakah Java `String.hashCode()` Menggunakan 31 sebagai Penggandanya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!