SORU
31 AĞUSTOS 2010, Salı


Neden hashCode içinde bir asal sayı kullanmak?

Sadece merak ettim neden asal bir sınıfta 2 ** yöntem kullanılır? Eclipse hashCode() benim yöntem oluşturmak için kullanırken örneğin, her zaman 31 kullanılan asal sayı vardır:

public int hashCode() {
     final int prime = 31;
     //...
}

Referanslar:

Burada buldum bu işler karma nasıl Hashcode ve makale hakkında iyi bir astar (C# ama kavramları aktarılabilir): Eric Lippert's Guidelines and rules for GetHashCode()

CEVAP
31 AĞUSTOS 2010, Salı


Asal sayılar en iyi karma demetleri arasında veri dağıtmak için seçilir. Eğer girdilerin dağılımı rastgele ve eşit bir şekilde yayılır, sonra da karma kod/modül seçimi önemli değil. Sadece giriş için belirli bir desen olduğunda bir etkisi vardır.

Bu genellikle bellek konumları ile ilgili bir durum. Örneğin, 32-bit tamsayı tüm adresleri 4 ile bölünebilen hizalanır. Bu tabloda olmayan Başbakan modül: vs bir başbakan kullanmanın etkileri görselleştirmek için bir göz atın

Input       Modulo 8    Modulo 7
0           0           0
4           4           4
8           0           1
12          4           5
16          0           2
20          4           6
24          0           3
28          4           0

Non-prime bir modül vs Başbakan bir modülü kullanırken neredeyse mükemmel dağılımı dikkat edin.

Yukarıdaki örnek, büyük ölçüde yapmacık bununla birlikte, genel ilke ile ilgiligiriş desen, modüllü en iyi dağıtım getirebilecek bir asal sayı kullanarak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011
  • sdasmarchives

    sdasmarchive

    2 HAZİRAN 2010