Насколько я понимаю, на HashMap порядок непредсказуем, поэтому время поиска тоже непредсказуемо. Но мне задали этот вопрос в недавнем интервью: «Есть ли ситуация, когда у HashMap есть определенное время поиска?»
2 ответа
HashMap - это вероятностная структура данных со средней сложностью поиска O (1), однако поиск может занять столько же, сколько O (n) в худшем случае.
Существует множество «особых» случаев, когда хэш гарантированно выполняет поиск за время O (1).
Например:
- HashMap пуст
- HashMap имеет только один элемент
- HashMap не имеет коллизий (в ведре нет более одного элемента)
Если все ключи известны заранее, можно сгенерировать «идеальную» функцию хеширования, которая гарантирует случай №3. На практике это используется для создания таблиц поиска символов, в которых заранее известен набор символов (строк).
Видеть:
- http://en.wikipedia.org/wiki/Hash_table
- http://en.wikipedia.org/wiki/Perfect_hash_function
- http://www.gnu.org/software/gperf/
hashMap
имеет переменное время извлечения .. !!
hashMap
находит местоположение с помощью хеш-функции. Но хеш-функция требует времени для завершения. По сути, это алгоритм, поэтому выполнение этого алгоритма требует некоторого времени .. !!
Следующее, что даже если хеш-функция завершается, она создает одно и то же местоположение для более чем одной записи (в некоторых случаях). Так что в этом случае он хочет заглянуть глубже. Это тоже требует больше времени .. !!
Единственный случай, когда
hashMap
указывает на записи, которые имеют общие время извлечения таково, что данные всегда должны давать уникальныйhashKey
. То есть время всегда будет равно времени выполнения хэша. Алгоритм.
Но в случае с массивом время извлечения всегда одно и то же, поскольку он обеспечивает прямой доступ к местоположению массива, время всегда равно O (1).
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.