2016-07-19 2 views
0

Мне было предложено это в интервью. Я думал, что этот вопрос слишком общий, чтобы указать конкретную структуру данных.Лучшая структура данных для хранения 10 000 записей в java

Однако, до сих пор, если мы канализировать вопрос к следующему критерию, что будет лучшим структуры данных для использования:

  1. Если скорость вставки должна быть быстрее?
  2. Если поиск конкретных данных должен быть самым быстрым?
+2

Посмотрите на [большие-o-summary-for-java-collections-framework-реализации] (http://stackoverflow.com/questions/559839/big-o-summary-for-java-collections-framework -implementations). Вы найдете ответ. – MockerTim

+1

Обычно они могут захотеть, чтобы у вас появилось больше вопросов, чтобы прояснить их вопрос: для чего вы хотите использовать записи? набор данных редко меняется - в основном, чтение? набор данных действительно вставляет и удаляет много? – Tin

+0

Для более быстрых вставок - Связанный список, для более быстрого поиска - двоичное дерево поиска, что более важно? – SomeDude

ответ

6

HashSet обеспечивает как вставку O (1), так и поиск O (1), что сложно с теоретической точки зрения.

На практике, для размера 10.000 ссылок, отсортированный ArrayList может по-прежнему превосходить HashSet, хотя вставка O (n) и поиск O (log (n)). Зачем? Поскольку он хранит данные (по меньшей мере, ссылки) в смежном диапазоне памяти и, следовательно, может воспользоваться кэшированием аппаратной памяти.

Проблема с примечанием «большой О» заключается в том, что она полностью игнорирует время, требуемое для одной операции. Это хорошо для асимптотических соображений и очень больших наборов данных, но для размера 10.000 это может ввести в заблуждение.

Не пробовал. И я уверен, у вашего собеседника тоже нет :).

Смежные вопросы