Что работает быстрее Map или Array?

220
20 января 2018, 00:37

Есть

Map<Integer,Picture> mPict = new HashMap<>();

и

Picture[] aPict = new Picture[100];

Что будет работать быстрее и насколько?

Как буду использовать: один раз заполню массив или карту, а потом буду обращаться к элементам. По одному или по порядку. Пересоздание массива или карты не планируется. При загрузке приложения заполню массив данными из файлов и все, буду их использовать, чтобы не обращаться постоянно к файлам.

Answer 1

HashMap это структура данных позволяющая делать быстрый поиск по ключу. То есть поиск делается за константное количество операций O(1).

Если же вам надо найти элемент в массиве, то это делается через полный перебор элементов, то есть количество операций O(n).

Соответственно если у вас будет много операций поиска, то HashMap значительно быстрее.

Если речь идёт о добавлении элементов, то опять же HashMap работает быстрее так как массив полностью пересоздаётся при изменении числа элементов, да и вообще в него добавлять нельзя, он фиксированный по размеру.

Но это всё в случае большого количества элементов. При малом количестве элементов массив будет работать быстрее.

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

Конечно есть много разных ситуаций, и в каждой ситуации решение что применять лучше может быть своё, в этом посте я не буду описывать все варианты. А ваш вопрос не позволяет ответить более точно именно для вашего варианта, недостаточно данных.

Почитать про Map.

READ ALSO
Проблема с Generics

Проблема с Generics

Есть такой метод в классе Num

182
Как поменять версию java в Maven compiler?

Как поменять версию java в Maven compiler?

Как поменять версию java в Maven compiler? Не для конкретного проекта в POM файле, а в настройках Maven? У меня прописаны переменные "JAVA_HOME" и "MAVEN_HOME"Текущая...

201
Обновить ViewModel / RecyclerViewAdapter LifeCycle

Обновить ViewModel / RecyclerViewAdapter LifeCycle

При инициализации viewModel использую кастомный Factory с передачей в конструктор аргумента

156