Czy ktoś może mi wyjaśnić statyczną metodę HashMap # hash (int)?Wyjaśnienie metody HashMap # hash (int)
Jakie jest uzasadnienie, aby wygenerować jednolicie rozproszone hashy?
/**
* Applies a supplemental hash function to a given hashCode, which
* defends against poor quality hash functions. This is critical
* because HashMap uses power-of-two length hash tables, that
* otherwise encounter collisions for hashCodes that do not differ
* in lower bits. Note: Null keys always map to hash 0, thus index 0.
*/
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20)^(h >>> 12);
return h^(h >>> 7)^(h >>> 4);
}
Przykład ułatwi trawienie.
Wyjaśnienie Jestem świadomy operatorów, tabel prawdy i operacji bitowych. Po prostu nie mogę tak naprawdę rozszyfrować implementacji ani komentarza. A nawet rozumowanie za tym.
Jaką wersję Java używasz? Nie mogę znaleźć żadnych statycznych metod skrótu (int) w dowolnym miejscu. – tom
Przepraszam, że to HashMap. – qnoid
Edytowałem oryginalne pytanie, aby zawierało więcej komentarzy ze źródła, z korzyścią dla innych. – polygenelubricants