Задался таким банальным вопросом как "хочу увидеть коллизию своими глазами в 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.
ВОПРОС: что я упускаю? Как воссоздать коллизию?
Просто то, что Вы видите на скрине, это map.entrySet()
в режиме debug.
Вам просто нужно посмотреть ((HashMap) map).table
, и тогда наглядно видно, что "корзинка" всего одна.
Это без реализации hashcode
Это с hashcode 1
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
по заданию проекта должен выслать решение, которое будет запускаться файлом с форматомbat и
Подскажите, можно ли средствами CSS создать копию такой картинки ? Это некий фонарик который должен иметь два состояния - включённый и выключенный
Выполнил команду npm install expПапка node_modules создалась и Получил: Потом написал команду: `exp init Application