Пятница
19-04-2024
21:35
Главная страница
Каталог статей
Информист Приветствую Вас Гость | RSS
Регистрация
Вход
Меню сайта

Категории каталога
Delphi [3]
C++ [5]
Java [28]
программирование на Java
Assembler [4]
Алгоритмы на ассме
C# [1]
Eclipse [1]

Наш опрос
Насколько вам понравился этот сайт
Всего ответов: 545

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

Начало » Статьи » Programming » Java

Как потерять элемент в мапе

В HashMap можно потерять элемент, т.е. создать такие условия при которых получить элемент невозможно. Суть в том что ключом будет объект с переопределенными equals и hashCode. Далее, hashCode будет зависеть от состояния объекта (грубо говоря, от набора значений его полей). Если что то поместить в мапу с данным объектом в качестве ключа, а потом изменить состояние ключа, то значение может быть утеряно, например, при попытке достать объект по тому же ключу вернется то что было помещено в мапу ранее с таким же ключом.

 Map map = new HashMap();
 Test t1 = new Test();
 t1.setI(1);
 t1.setJ(2);
 map.put(t1, "t1");

 Test t2 = new Test();
 t2.setI(3);
 t2.setJ(4);
 map.put(t2, "t2");

 Test t3 = new Test();
 t3.setI(5);
 t3.setJ(6);
 map.put(t3, "t3");

 System.out.println(map); // {Test{i=5, j=6}=t3, Test{i=3, j=4}=t2, Test{i=1, j=2}=t1}

 t1.setI(3);
 t1.setJ(4);
 System.out.println(map); // {Test{i=5, j=6}=t3, Test{i=3, j=4}=t2, Test{i=3, j=4}=t1}
 System.out.println(map.get(t1)); // t2

 map.put(t1, "t12");
 System.out.println(map); // {Test{i=5, j=6}=t3, Test{i=3, j=4}=t12, Test{i=3, j=4}=t1}
 System.out.println(map.get(t1)); // t12

Вывод: ключом должен быть immutable объект

Категория: Java | Добавил: Judge (22-12-2012)
Просмотров: 3942 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Поиск по каталогу
Яндекс


Поиск по Информисту

Наша кнопка


Друзья сайта

Статистика


Copyright MyCorp © 2006Сайт создан в системе uCoz