Я читал Java api docs в классе Hashtable и наткнулся на несколько вопросов. В документ, он говорит: "Note that the hash table is open: in the case of a "hash collision", a single bucket stores multiple entries, which must be searched sequentially." Я попытался следующий код самЧто означает «хеш-таблица открыта» в Java?
Hashtable<String, Integer> me = new Hashtable<String, Integer>();
me.put("one", new Integer(1));
me.put("two", new Integer(2));
me.put("two", new Integer(3));
System.out.println(me.get("one"));
System.out.println(me.get("two"));
из положить был
1
3
- Является ли это то, что он подразумевает под "открытым"?
- Что случилось с Integer 2? собранный как мусор?
- Есть ли «закрытый» пример?
Как я могу избежать использования разных значений хэша одним ключом? – derrdji
Чтобы помочь в понимании: посмотрите на источник на String.hashCode() и распечатайте вывод «одного» .hashCode() и «two» .hashCode() – basszero
@derrdji: В общем случае hashCode() должен быть реализован в таким образом, чтобы маловероятно, чтобы разные значения хешировались с одним и тем же ключом. Если вы реализуете свои собственные классы в качестве ключей, и особенно если вы переопределите метод equals(), вы должны также предоставить хороший метод hashCode(). Для получения дополнительной информации о теории хеш-функций см .: http://en.wikipedia.org/wiki/Hash_function – Avi