HashSet vs ArrayList содержит производительность () для нескольких небольших коллекций String - PullRequest
0 голосов
/ 25 апреля 2018

Этот вопрос, по сути, является дополнением к этому , в котором уже задается вопрос о производительности contains() в Java, но мой пример использования предназначен для коллекций с небольшим количеством элементов String.

проблема более точная, в коллекции будет:

  • Только java.lang.String элементов (таким образом, используя String.equals(...) в вызовах contains(...)).
  • Строка имеет среднюю длину 16.
  • Среднее число *1017* элементов в одной коллекции равно 7.
  • Коллекция будет часто встречаться contains(...) проверки, случайные добавления и отсутствие удалений.
  • Порядок строк вообще не важен.
  • Этот код будет работать на веб-сервере, и таких коллекций будет много.объекты (~ 1000 на запрос пользователя).

Какая коллекция лучше всего подойдет для этого варианта использования, как с точки зрения памяти, так и с точки зрения времени?

1 Ответ

0 голосов
/ 25 апреля 2018

Какая коллекция лучше всего подойдет для этого варианта использования с точки зрения памяти?

A String[]. Не может быть более компактным, чем это.

Конечно, это не совсем Collection, но я взял это в самом простом из возможных значений.

Для лучшей производительности поиска (contains), сортируйте ее и используйте бинарный поиск.

... и по времени?

Возможно, HashSet, но вам нужно протестировать производительность таких небольших коллекций, потому что производительность O (log n) , например, бинарный поиск может на самом деле быть быстрее, чем O (1) производительность поиска в хеш-таблице, когда n равен только 7.

Для этого небольшого значения n разница в производительности может быть незначительной, а объем памяти может быть более важным.

При выборе между объемом памяти и производительностью во время выполнения, только вы можете решить, какая из них "лучше подходит". Мы не можем решить это за вас.

...