Herhangi bir anlam ifade edebilmesi için HashMap'in eşyaları kovalara nasıl tahsis ettiği anlayışı ile birleştirilmelidir. Bu, bir kova endeksinin seçildiği önemsiz fonksiyondur:
static int indexFor(int h, int length) {
return h & (length-1);
}
Öyleyse görüyorsunuz ki, varsayılan masa boyutu 16 ile, sadece hash'ın en az 4 önemli bitinin aslında kovaları ayırmak için önemli olduğunu! (16 - 1 = 15, hash'ı 1111 b ile maskeler)
Eğer hashCode fonksiyonunuz geri dönerse bu açıkça kötü bir haber olabilir:
10101100110101010101111010111111
01111100010111011001111010111111
11000000010100000001111010111111
//etc etc etc
Böyle bir karma işlevi büyük olasılıkla yazarı tarafından görünen herhangi bir şekilde "kötü" olmaz. Ancak, haritayı kova ayırma yöntemiyle birleştirirseniz, patlama, MapFail (tm).
H'nin 32 bitlik bir sayı olduğunu aklınızda tutarsanız, bunlar sihir sayıları değildir. Sistematik olarak sayının en anlamlı bitlerini en az anlamlı bitlere doğru xoring ediyor. Amaç, ikili olarak görüntülendiğinde, "her yerde" her yerde gerçekleşen sayıdaki "farklılıklar", en az anlamlı bitlerde görünür hale gelmesidir.
Çarpışmalar sınırlanır çünkü aynı ilgili LSB'lere sahip farklı sayıların sayısı artık önemli ölçüde sınırlıdır, çünkü ikili gösterimde herhangi bir yerde meydana gelen herhangi bir fark, kovalama için önemli olan bitlere sıkıştırılır.