Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3-й семестр / Лекции / 7 - Презентация 2

.pdf
Скачиваний:
60
Добавлен:
25.12.2020
Размер:
772.48 Кб
Скачать

Центр дистанционного обучения

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