Насколько я понимаю, на HashMap порядок непредсказуем, поэтому время поиска тоже непредсказуемо. Но мне задали этот вопрос в недавнем интервью: «Есть ли ситуация, когда у HashMap есть определенное время поиска?»

1
chaoshangfei 17 Мар 2014 в 21:34

2 ответа

Лучший ответ

HashMap - это вероятностная структура данных со средней сложностью поиска O (1), однако поиск может занять столько же, сколько O (n) в худшем случае.

Существует множество «особых» случаев, когда хэш гарантированно выполняет поиск за время O (1).

Например:

  1. HashMap пуст
  2. HashMap имеет только один элемент
  3. HashMap не имеет коллизий (в ведре нет более одного элемента)

Если все ключи известны заранее, можно сгенерировать «идеальную» функцию хеширования, которая гарантирует случай №3. На практике это используется для создания таблиц поиска символов, в которых заранее известен набор символов (строк).

Видеть:

2
anttix 17 Мар 2014 в 22:02

hashMap имеет переменное время извлечения .. !!

hashMap находит местоположение с помощью хеш-функции. Но хеш-функция требует времени для завершения. По сути, это алгоритм, поэтому выполнение этого алгоритма требует некоторого времени .. !!

Следующее, что даже если хеш-функция завершается, она создает одно и то же местоположение для более чем одной записи (в некоторых случаях). Так что в этом случае он хочет заглянуть глубже. Это тоже требует больше времени .. !!

Единственный случай, когда hashMap указывает на записи, которые имеют общие время извлечения таково, что данные всегда должны давать уникальный hashKey. То есть время всегда будет равно времени выполнения хэша. Алгоритм.

Но в случае с массивом время извлечения всегда одно и то же, поскольку он обеспечивает прямой доступ к местоположению массива, время всегда равно O (1).

0
Dileep 17 Мар 2014 в 21:51