Ответ 1
В настоящее время я обсуждаю компактные повторные реализации HashMap
и HashSet
с Doug Lea. Этот конкретный вопрос не возник, но вот мои первые мысли по этому вопросу...
- Связанные хеш-таблицы ухудшаются разумно изящно. Является ли это более высокими коэффициентами нагрузки или множеством хеш-коллизий, цепочка не ухудшается почти так же быстро, как открытая адресация.
- Как вы уже сказали,
remove
- это не приятная операция в открытых таблицах. Как правило,remove
является наименее распространенной операцией в хэш-таблицах, но есть приложения, для которых это более распространено, и будет отмечена плохая производительность. - Я также подозреваю - хотя у меня мало данных, что реализация "связанной" хэш-таблицы с открытым адресом будет значительно сложнее.
LinkedHashMap
записывается как подклассHashMap
и занимает большую часть деталей реализации; его несколько проще реализовать связанный список записей, когда записи являются дискретными объектами - и в этот момент вы уже больше всего привыкли к цепочке реализации. - Ничто в спецификации не связывает их с этой реализацией - они всегда могут свободно обходиться с ней позже.
- Библиотеки коллекций JDK... не делают потребление памяти особенно высокоприоритетным. Память дешевая. (Вы можете или не согласны с этим, но это определенно заметная тенденция.)