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
883 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!

sumber:php.cn
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