Zauważyłem, że w Javie, hashCode
dla HashMap
które zawierają tylko wpisy, gdzie klucz i wartości są takie same, np {1:1}
, {"abc":"abc"}
itp jest zawsze zero. Czy istnieje jakieś uzasadnienie tego dziwnego zachowania?Dlaczego hashcode zero dla HashMap zawierających wartości, które są takie same jak klucze
6
A
Odpowiedz
11
Jest to konsekwencją specification z hashCode()
dla Map.Entry
, która wymaga, aby kody skrótu dla kluczy i wartości były XOR'D.
Jedynymi osobami, które mogą powiedzieć, że , dlaczego został wybrany ten kod skrótu, są ludzie, którzy napisali go oryginalnie, choć mam wrażenie, że Java żałuje, że określam tę (złą) funkcję skrótu.
Boję się spytać, w jaki sposób dowiedziałeś się o tym zachowaniu. Udzielenie odpowiedzi na to pytanie w ciągu minuty jest bardzo imponujące! – dasblinkenlight
@dasblinkenlight Prawdopodobnie spotkał się z tym i pomyślał o tym wcześniej (jak słynna odpowiedź Jima Skeeta na temat nieciągłości). Być może pierwszą rzeczą, którą zrobił, gdy zobaczył pytanie, było sprawdzenie implementacji 'hashCode' w' HashMap'. Tak czy inaczej, wciąż robi wrażenie. –
@ dasblinkenlight dla * osoby *, która działa tak bardzo w podstawowych bibliotekach; to powinno być naprawdę "z półki". – Eugene