Как реализовать коллизию HashMap?

165
15 января 2019, 08:00

Задался таким банальным вопросом как "хочу увидеть коллизию своими глазами в 8 джаве". Из истоков известно, что колизия возникает в том случае, когда хешкод одинаковый, но по equals обьекты разные.

При коллизии, обьект (ключ HashMap-ы) должен помещаться в некую структуру внутри ОДНОЙ корзины. В джаве 8 (на сколько я слышал) в виде красно-черного дерева.

Пример класса:

public class Service {
    private int age;
    public Service(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        return false;
    }
    @Override
    public int hashCode() {
        return 1;
    }
}

Как видно, hashCode() данного класса всегда будет равен единице (для всех его создаваемых обьектов). Также equals() будет всегда говорить о том, что объекты не равны между собой.

Пример реализации:

    public class Work {
    private static Map<Service, String> map;
    public static void main(String[] args) {
        Service service = new Service(1);
        Service service2 = new Service(2);
        Service service3 = new Service(3);
        Service service4 = new Service(4);
        Service service5 = new Service(5);

        map = new HashMap<>();
        map.put(service, "empty");
        map.put(service2, "empty");
        map.put(service3, "empty");
        map.put(service4, "empty");
        map.put(service5, "empty");
    }
}

Стоит также заметить, как всем известно, что hashCode() + equals() работают ТОЛЬКО для ключа в HashMap.

Результат:

Никакой структуры я не вижу, обычная HashMap.

ВОПРОС: что я упускаю? Как воссоздать коллизию?

Answer 1

Просто то, что Вы видите на скрине, это map.entrySet() в режиме debug. Вам просто нужно посмотреть ((HashMap) map).table, и тогда наглядно видно, что "корзинка" всего одна.

Это без реализации hashcode

Это с hashcode 1

READ ALSO
Запуск jar через файл sh в Windows

Запуск jar через файл sh в Windows

по заданию проекта должен выслать решение, которое будет запускаться файлом с форматомbat и

135
Ошибка валидации даты

Ошибка валидации даты

Есть такой сервис:

202
Как реализовать такую лампочку на css ?

Как реализовать такую лампочку на css ?

Подскажите, можно ли средствами CSS создать копию такой картинки ? Это некий фонарик который должен иметь два состояния - включённый и выключенный

158
Как развернуть React Native с Expo?

Как развернуть React Native с Expo?

Выполнил команду npm install expПапка node_modules создалась и Получил: Потом написал команду: `exp init Application

178