- •Первая часть
- •Интерфейсы и классы коллекций.
- •Интерфейсы:
- •Классы:
- •Итераторы:
- •Компараторы:
- •Интерфейсы и классы карт.
- •Интерфейсы:
- •Классы:
- •IndexOfSubList/lastIndexOfSubList – производит поиск “подсписка”.
- •Вторая часть
- •Сериализация объектов.
- •Байтовые потоки.
- •Символьные потоки.
- •Объектные потоки.
- •Третья часть
Первая часть
-
Интерфейсы и классы коллекций.
Интерфейсы:
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. Синхронизирован.
-
Итераторы и компараторы.
Итераторы:
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();
...
}