
3-й семестр / Лекции / 7 - Презентация 2
.pdf
Центр дистанционного обучения
Collections Framework
На самом деле TreeMap реализует интерфейсы SortedMap и NavigableMap:
public interface SortedMap<K, V> extends Map<K, V> {
// дополнительные операции
}
public interface NavigableMap<K, V> extends SortedMap<K, V> {
// дополнительные операции
}
online.mirea.ru

Центр дистанционного обучения
Collections Framework
Как работает ArrayList
Внутри ArrayList содержит массив Object[], изначально размера 10 (или того, который указан при вызове конструктора – т.н. capacity), а также поле с размером списка – сколько элементов из массива реально используются.
При добавлении 11-го элемента создается новый массив в 1.5 раза больше исходного и в него копируются старые элементы.
Таким образом, для первых 10 элементов сложность добавления – O(1), для 11-го – O(N). В среднем сложность операции добавления получается O(1), но время от времени случаются “выбросы” производительности, когда копируется
массив.
online.mirea.ru

Центр дистанционного обучения
Collections Framework
Как работает ArrayList
public class ArrayList<E> implements List<E> {
private Object[] elementData;
private int size;
...
}
online.mirea.ru

Центр дистанционного обучения
Collections Framework
List<String> list = new ArrayList<>(2);
list.add(“A”); // elementData: {“A”, null}, size = 1
list.add(“B”); // elementData: {“A”, “B”}, size = 2
list.add(“C”); // elementData: {“A”, “B”, “C”}, size = 3
list.add(“D”); // elementData: {“A”, “B”, “C”, “D”}, size = 4
list.add(“E”); // elementData: {“A”, “B”, “C”, “D”, “E”, null}, size = 5
list.add(“F”); // elementData: {“A”, “B”, “C”, “D”, “E”, “F”}, size = 6
Увеличение capacity:
2 -> 2*1.5 = 3 -> 3*1.4 = 4 -> 4*1.5 = 6
online.mirea.ru

Центр дистанционного обучения
Collections Framework
Кроме ArrayList, есть еще одна реализация интерфейса List – LinkedList. Она обладает существенными недостатками:
•больше расход памяти, чем ArrayList
•доступ по индексу (методы get и set) имеет алгоритмическую сложность O(N) в отличие от O(1) для ArrayList (но обход всех элементов через итератор имеет одну сложность – O(N))
Плюсы LinkedList:
•метод add всегда отрабатывает за фиксированное время (для ArrayList оно иногда может быть O(N))
•вставка/удаление в начало или середину списка может быть быстрее, чем ArrayList
online.mirea.ru

Центр дистанционного обучения
Collections Framework
online.mirea.ru