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

Рейтинг: 2Ответов: 1Опубликовано: 28.02.2023

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

Ответы

▲ 3Принят

В таком случае в 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;
        }