/NC-HW3

Primary LanguageJava

Сравнение производительности коллекций Java


1. Сравнение MyLinkedList, LinkedList, ArrayList

- - - - -

Исходя из результатов, можно сделать вывод, что ArrayList почти во всём эффективнее, чем LinkedList. В этих тестах данных было много, и индекс генерировался случайно с равномерным распределением. Таким образом, создавались ситуации, в которых LinkedList был максимально неэффективен(например, если индекс получался близким к середине), либо же, напротив, ArrayList(например, индекс был маленьким при удалении или вставке). Но если необходимо удалить большое множество элементов, проходя по коллекции итератором, то LinkedList делает это гораздо эффективнее (в тесте удалялась примерно пятая часть данных).

Рассмотрим частные случаи:

- -

ArrayList очень неэффективен при вставке и удалении в начале массива

Вывод: LinkedList в большинстве случаев проигрывает ArrayList, но в следующих частных случаях гораздо предпочтительнее использовать LinkedList:

  • Частая вставка и удаление по индексу в начале
  • Вставка и удаление по значению. Особенно если необходимо вставить/удалить много данных за раз, проходя итератором по коллекции

Также LinkedList стабильнее добавляет элементы, т.к. ArrayList нужно расширяться, что может произойти невовремя.


2. Сравнение HashSet, LinkedHashSet, TreeSet

- -

Вывод: Структуры представляют из себя множество, в котором нет повторяющихся элементов. Они отличаются между собой способом хранения данных. Стоит выбирать LinkedHashSet/TreeSet если необходимо хранить данные в порядке добавления/отсортированно. В остальном подойдёт HashSet.


3. Сравнение HashMap, LinkedHashMap, TreeMap

- - -

Вывод: Структуры хранят пару (ключ, значение), где ключ уникален. Стоит выбирать LinkedHashMap/TreeMap если необходимо хранить данные в порядке добавления/отсортированно. В остальном подойдёт HashMap.