Как происходит вставка нового элемента с коллизией в hashmap?

Всем привет. Допустим, я вставляю 8 значений в hashmap, у ключей одинаковый hashcode, но разный equals. Все значения попадут в одну ячейку, будут выстроены в дерево. Вопрос, как в java происходит выбор места куда новый элемент вставить в дерево, в случае коллизии? При этом ключи не comparable


Ответы (1 шт):

Автор решения: Serodv

В таком случае в HashMap существует утилитный метод tieBreakOrder, который формирует порядок взаимоотношения между объектами исходя из их identity hash code:

        static int tieBreakOrder(Object a, Object b) {
            int d;
            if (a == null || b == null ||
                (d = a.getClass().getName().
                 compareTo(b.getClass().getName())) == 0)
                d = (System.identityHashCode(a) <= System.identityHashCode(b) ?
                     -1 : 1);
            return d;
        }
→ Ссылка