Да, это будет работать, но, как вы упомянули, ваша функция хеширования должна быть уникальной на 100%. Любые дубликаты приведут к тому, что вам придется использовать какое-то разрешение конфликта. Я бы порекомендовал линейную цепочку.
edit: Hashmap.size () разрешает O (1) доступ
edit 2: В связи с путаницей, вызванной Ларри = P
Да, хеширование - это O (k), где k - длина ключа. Каждый может согласиться с этим. Однако, если у вас нет идеального хэша, вы просто не можете получить O (1) раз. Вы утверждали, что вам не нужна уникальность для достижения O (1) удаления определенного элемента. Я гарантирую вам, что это неправильно.
Рассмотрим наихудший сценарий: каждый элемент хеширует одно и то же. В итоге вы получите один связанный список, который, как известно, не имеет удаления O (1). Я надеюсь, что, как вы упомянули, никто не настолько глуп, чтобы создать такой хэш.
Дело в том, что уникальность хеша является необходимым условием для O (1) времени выполнения.
Даже тогда, технически, это не O (1) Big O КПД. Только с использованием амортизированного анализа вы достигнете постоянной эффективности времени в худшем случае. Как отмечено в статье в Википедии об амортизированном анализе
Основная идея состоит в том, что операция в наихудшем случае может изменить состояние таким образом, что наихудший случай не может возникнуть снова в течение длительного времени, что приведет к амортизации его стоимости.
Это относится к идее, что изменение размера вашей хеш-таблицы (изменение состояния вашей структуры данных) при определенных коэффициентах загрузки может обеспечить меньшую вероятность коллизий и т. Д.
Надеюсь, это все прояснит.