Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к коллоквиуму.docx
Скачиваний:
2
Добавлен:
17.11.2018
Размер:
49.95 Кб
Скачать

Первая часть

  1. Интерфейсы и классы коллекций.

Интерфейсы:

Collection – просто коллекция элементов, добавление, удаление, проверка на содержание, итерирование, получение размера.

List extends Collection – обращение к элементам по индексу, ListIterator.

Stack extends List – добавление в конец и удаление из конца.

Set – не должен содержать дубликатов (элементов, для которых equals выдает true).

SortedSet extends Set – всегда отсортирован, есть получение компаратора, методы для получения подмножества и первого и последнего элементов.

NavigableSet extends SortedSet – методы higher и lower для навигации по множеству, итерирование в обе стороны.

Queue extends Collection – методы для добавления в конец, извлечения из начала.

Deque extends Queue – методы для добавления и извлечения для конца и начала. Не реализует Stack!

BlockingQueue extends Queue и BlockingDeque extends BlockingQueue, Deque – методы для получения элемента, ожидающие, пока их положит другой поток.

TransferQueue extends BlockingQueue (java se 7) – метод transfer для передачи элемента потребителю и ожидания пока он появится, методы вроде getWaitingConsumerCount для получения числа ожидающих потребителей.

Классы:

AbstractCollection, AbstractList, AbstractQueue, AbstractSet – частично реализуют соответствующие коллекции.

AbstractSequentialList extends AbstractList – реализация связного списка.

LinkedList extends AbstractSequentialList – двусвязный список.

ArrayList extends AbstractList – массив, расширяющийся вдвое, при нехватке памяти (capacity).

ArrayDeque – дек, реализованный на массиве. Не имеет ограничений по памяти.

PriorityQueue – приоритетная очередь (куча).

HashSet extends AbstractSet – множество реализованное с помощью хэш-таблицы.

LinkedHashSet extends HashSet – связанный HashSet. Хранит порядок добавления элементов.

TreeSet implements NavigableSet – отсортированное множество, построенное на красно-чёрных деревьях.

EnumSet – множество для работы с enum. Требует мало памяти и работает быстро. Реализовано на последовательности битов.

CopyOnWriteArrayList, CopyOnWriteArraySet – копируют информацию при модификации в новое хранилище, не требуют синхронизации.

LinkedBlockingQueue, ArrayBlockingQueue, PriorityBlockingQueue, LinkedBlockingDeque – коллекции с реализацией блокирующих операций.

DelayQueue implements BlockingQueue – очередь с элементами, у каждого из которых, есть время, только через которое элемент может быть извлечен.

ConcurrentSkipListSet implements NavigableSet – множество, реализованное на списке с пропусками (несколько параллельных списков), потокобезопасна.

ConcurrentLinkedQueue – очередь на связном списке, потокобезопасна.

SynchronousQueue – очередь для хранения только одного элемента и передачи его из потока в поток.

LinkedTransferQueue – реализация TransferQueue.

Vector – старая реализация ArrayList. Синхронизирован.

  1. Итераторы и компараторы.

Итераторы:

Collection реализует Iterable. Метод iterator позволяет получить Iterator, проходящий по всей коллекции. В интерфейсе List есть метод listIterator, возвращающий ListIterator.

Iterator имеет методы next, hasNext и remove (последний в некоторых случаях может выбрасывать UnsupportedOperationException). В случае, если hasNext вернул false, согласно документации, метод next выбросит NoSuchElementException. В случае, если метод next не был вызван или для текущего элемента уже была выполнена операция remove, remove, в том случае, если он реализован, выбрасывает IllegalStateException.

ListIterator также поддерживает методы для движения в обратную сторону: hasPrevious и previous. nextIndex и previousIndex возвращают соответствующие индексы элементов. Опционально, могут поддерживаться операции set и add в зависимости от коллекции.

Во время итерирования, как правило, коллекции не должны изменяться никак, кроме как через итератор. В случае изменения, итератором, во время следующей операции, будет выброшен ConcurentModificationException.

По массивам и классам, реализовавшим Iterable (в том числе, по коллекциям) возможно итерирование с помощью цикла “for-each”:

for (ElementType element : iterable) ...

Последняя запись эквивалентна:

Iterator<ElementType> iterator = iterable.iterator();

while (iterator.hasNext()) {

ElementType element = iterator.next();

...

}