SORU
18 Kasım 2008, Salı


Neden Java'In hashCode() Dize çarpanı olarak 31 kullan?

Java, String bir nesne için hash code olarak hesaplanır

s[0]*31^(n-1) s[1]*31^(n-2) ... s[n-1]

s[i] * * * * int aritmetik, kullanarak ithdizenin karakter, n dize uzunluğunu, ^ üs gösterir.

Neden 31 çarpanı olarak kullanılır?

Çarpan oldukça büyük bir asal sayı olması gerektiğini anlıyorum. Neden 29 ya da 37, ve hatta 97 değil mi?

CEVAP
18 Kasım 2008, Salı


Joshua göre Bloch Effective Java (sürekli sayesinde aldım yeterli ve tavsiye edilecek bir kitap stackoverflow üzerinde söz edilen):

Değeri 31 garip bir başbakan olduğu için seçildi. Hatta ve çarpma taştı, bilgi 2 ile çarpma değişen eşdeğer olarak kaybetmiş olurdu. Bir başbakan kullanmanın avantajı, daha az açıktır, ama bu bir gelenek. 31 güzel bir özellik çarpma kayması ve daha iyi performans için bir çıkarma tarafından değiştirilebilir: 31 * i == (i << 5) - i. Modern VMs optimizasyon bu tür otomatik olarak yapmak.

(Bölüm 3, Madde 9: her Zaman göz ardı eşit olduğunda hashcode, sayfa 48) geçersiz kılar

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BigDawsVlogs

    BigDawsVlogs

    17 HAZİRAN 2013
  • EmmightySofia

    EmmightySofi

    25 EYLÜL 2011
  • grickle

    grickle

    22 AĞUSTOS 2006