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

  • B3ASTTY™

    B3ASTTY™

    27 Mayıs 2013
  • PlugResearch

    PlugResearch

    22 Mart 2006
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011