Подтвердить что ты не робот

Самая быстрая структура данных для contains() в Java?

Какая структура данных в Java, которая имеет самую быструю операцию для contains()?

например. У меня есть набор чисел {1, 7, 12, 14, 20...}

Учитывая другое произвольное число x, какой самый быстрый способ (в среднем) генерировать логическое значение того, содержится ли x в наборе или нет? Вероятность для! Содержит() примерно в 5 раз выше.

Предоставляют ли все структуры карты операцию o (1)? Является ли HashSet самым быстрым способом?

4b9b3361

Ответ 1

смотрите установки на основе набора (Hashset, enumset) и хэша (HashMap, linkedhash..., idnetityhash..). они имеют O (1) для содержит()

Этот чит-лист очень помогает.

Ответ 2

Для вашего конкретного случая чисел с относительно высокой плотностью я бы использовал BitSet, он будет быстрее и намного меньше, чем хэш-набор.

Ответ 3

Единственная структура данных быстрее, чем HashSet, скорее всего, будет TIntHashSet из Trove4J. Это использует примитивы, избегая необходимости использовать Integer Objects.

Если число целых чисел невелико, вы можете создать boolean [], где каждое имеющееся значение превращается в "true". Это будет O (1). Примечание: HashSet не является защищенным от O (1) и, скорее всего, будет O (log (log (N))).

Вы получите только O (1) для идеального хэш-распределения. Однако, скорее всего, вы столкнетесь с столкновениями хэшированных ведер, и некоторые поиски должны будут проверить более одного значения.

Ответ 4

хеширование (хэш-набор) является лучшим с O (1)