Это означает, что два элемента с разными ключами и одинаковым хэш-кодом попадают в одно и то же ведро.
В вашем случае ключи "два" одинаковы, поэтому второй ввод перезаписывает первый.
Но если предположить, что у вас есть собственный класс
class Thingy {
private final String name;
public Thingy(String name) {
this.name = name;
}
public boolean equals(Object o) {
...
}
public int hashcode() {
//not the worlds best idea
return 1;
}
}
И создал несколько его экземпляров. то есть
Thingy a = new Thingy("a");
Thingy b = new Thingy("b");
Thingy c = new Thingy("c");
И вставил их в карту. Тогда одно ведро, то есть ведро, содержащее материал с хэш-кодом 1, будет содержать список (цепочку) из трех элементов.
Map<Thingy, Thingy> map = new HashMap<Thingy, Thingy>();
map.put(a, a);
map.put(b, b);
map.put(c, c);
Таким образом, получение элемента с помощью любого ключа Thingy приведет к поиску хэш-кода O (1), за которым следует линейный поиск O (n) в списке элементов в корзине с хэш-кодом 1.
Также будьте осторожны, чтобы убедиться, что вы соблюдаете правильные отношения при реализации hashcode и equals. А именно, если два объекта равны, то они должны иметь одинаковый хэш-код, но не обязательно наоборот, поскольку несколько ключей могут получить один и тот же хэш-код.
Да, и полные определения открытого хеширования и закрытых хэш-таблиц смотрите здесь http://www.c2.com/cgi/wiki?HashTable
person
pjp
schedule
17.08.2009