static final int hash(Object key)
. Как вы уже увидели, он обращается к методу hashCode
ключа. Для Object
это нативный метод, то есть реализованный на C в коде виртуальной машины. Вероятно, вам будет интересно почитать этот ответ. Он про Java 8, но принципиально ничего не изменилось.
Да. Прямо над ним подробный комментарий о том, какие именно преобразования этот метод делает.
Обычно элементы в каждой корзине хранятся в виде списка, но когда их становится слишком много, список перестраивается в бинарное дерево по хэшу Node.
Для Java 12 в строке 625:
i = (n - 1) & hash