Rumah > Java > javaTutorial > Mengapakah `hashCode()` Java untuk Strings Menggunakan 31 sebagai Pengganda?

Mengapakah `hashCode()` Java untuk Strings Menggunakan 31 sebagai Pengganda?

Linda Hamilton
Lepaskan: 2024-12-26 13:28:13
asal
948 orang telah melayarinya

Why Does Java's `hashCode()` for Strings Use 31 as a Multiplier?

Mengapa 31 Digunakan sebagai Pengganda dalam Kaedah hashCode() Java untuk Strings?

Dokumentasi Java menentukan pengiraan objek String kod cincang seperti berikut:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Salin selepas log masuk

di mana s[i] ialah aksara ke-i rentetan, n ialah panjang rentetan, dan ^ mewakili eksponen. Formula ini menggabungkan pengganda tetap 31.

Rasional Penggunaan 31 sebagai Pengganda

Menurut karya terkenal Joshua Bloch, "Effective Java," pilihan 31 kerana pengganda terletak pada beberapa faktor:

  • Perdana Ganjil: Menjadi perdana ganjil, 31 memastikan bahawa jika pendaraban mengakibatkan limpahan, maklumat tidak hilang (tidak seperti menggunakan pengganda genap, yang bersamaan dengan peralihan ).
  • Tradisi: Menggunakan perdana sebagai pengganda ialah biasa.
  • Pengoptimuman Prestasi: 31 mempunyai sifat unik yang membolehkan peningkatan prestasi: 31 * i boleh digantikan dengan cekap dengan (i << 5) - i. Pengoptimuman ini biasanya digunakan oleh mesin maya moden.

Atas ialah kandungan terperinci Mengapakah `hashCode()` Java untuk Strings Menggunakan 31 sebagai Pengganda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan