Я был вдохновлен этой темой: Сравнение распределения производительности и памяти между List и Set, чтобы фактически запустить некоторые тесты и измерить разницу в производительности между ArrayList
и HashSet
.
Самый верный ответ в упомянутой теме меня очень заинтриговал (ссылка):
HashSet потребляет в 5,5 раз больше памяти, чем ArrayList для того же количества элементов
С помощью ScalaMeter Я хотел убедиться в этом.
Я сделал два простых теста, добавив от 10000
до 100000
элементов как к ArrayList
, так и к HashSet
. Установка начального размера до максимума не изменила результаты. Я тестировал эти коллекции с двумя типами:
-
Int
(ввод последовательных чисел от 0 до 100000) -
String
(помещение случайной строки с помощью ApacheRandomStringUtils
)
Код доступен в моем репозитории здесь.
И запустив те, дали мне следующие результаты:
- X-axis - размер → размер коллекции
- Y-axis - значение → количество используемого kB
Для коллекций, содержащих Int
:
Для коллекций, содержащих String
размера 10:
Для коллекций, содержащих String
размера 50:
Вопрос:
Что случилось с теорией, упомянутой в цитируемом ответе? Это ложь? Или, вероятно, на моей стороне какая-то ошибка?
Спасибо:)!
Обновление после ответа @andrzej Я еще раз обновил код (и репозиторий). Результаты улучшаются, но результаты не отличаются в 5,5 раз. Теперь я проверяю что-то большее.