Core-2: Java Collections Framework Flashcards
Что такое коллекция?
«Коллекция» - это структура данных, или объект, который содержит набор объектов одного класса. Каждый из этих объектов в коллекции называется элементом.Классы коллекций являются дженерик-параметрами
Иерархия Коллекций: главные интерфейсы.
На вершине иерархии в Java Collection Framework располагаются 2 интерфейса: Collection (extends Iterable) и Map. Эти интерфейсы разделяют все коллекции, входящие во фреймворк на две части по типу хранения данных: простые последовательные наборы элементов и наборы пар «ключ — значение» соответственно.
Методы Collection
- - int size(); - void clear(); - boolean isEmpty(); - Iterator<E> iterator(); - Object[] toArray(); - T[] toArray(new T[0]) - boolean contains(Object o); - boolean containsAll(Collection<?> c); - boolean add(E e); - boolean addAll(Collection<? extends E> c); - boolean remove(Object o); - boolean removeAll(Collection<?> c); - boolean retainAll(Collection<?> c); - default boolean removeIf(Predicate<? super E> filter) - default void forEach(Consumer<? super T> action)` : from Iterable
Какие интерфейсы расширяют Collection и какие у них реализации?
Интерфейс Collection расширяют интерфейсы:
1) List (список): упорядоченная последовательность элементов, позволяющая хранить дубликаты и null.
2) Set (сет) описывает неупорядоченную коллекцию, хранящую уникальные элементы.
3) Queue (очередь) предназначена для хранения и извлечения элементов по принципу FIFO.
Какие методы добавляет List в Collection?
- get(int index) - set(int index, element) - indexOf(element) - lastIndexOf(element) - ListIterator<E> listIterator(); - List<E> subList(int from, int to); - default void replaceAll(UnaryOperator<E> operator) - static <E> List<E> of(E... elms) - static <E> List<E> copyOf(Collection<? extends E> coll) - add(int index, element) - addAll(int index, Collection c) - remove(int index)
Какие методы добавляет Set в Collection?
- static <E> Set<E> of(E... elms)</E></E>
- static <E> Set<E> copyOf(Collection<? extends E> coll)</E></E>
Какие методы добавляет Queue в Collection?
*add - throws
- boolean offer(E e) - null;
- E remove() - throws
- E poll() - null
- E element() - throws
- E peek() - null
Какие методы добавляет Deque к Queue?
Deque (двунаправленная очередь) предназначена для хранения и извлечения элементов по принципу FIFO + LIFO.
- addFirst()
- addLast()
- …element->getFirst()
Описать Механизм Работы List
init capacity = 10.
при заполнении массива создаётся новый x1.5 и туда копируется старый через System.arraycopy();
Назвать главные реализации List
- ArrayList - инкапсулирует в себе обычный массив Oblect, длина которого автоматически увеличивается при добавлении новых элементов. Элементы такой коллекции пронумерованы, начиная от нуля, к ним можно обратиться по индексу.
- LinkedList (implements Deque)
двунаправленный связный список - состоит из узлов, каждый из которых содержит как собственно данные, так и две ссылки на следующий и предыдущий узел. - Vector — реализация динамического массива объектов, методы которой синхронизированы.
- Stack — расширяет Vector добавляя LIFO (last-in-first-out).
Какие методы ArrayList добавляет в List?
-
public void trimToSize(
) public void ensureCapacity(int minCap)
- -
Назвать главные реализации Set
- HashSet - использует HashMap для хранения данных: в качестве ключа используется добавляемый элемент. В качестве значения объект-заглушка(константа). Порядок хранения элементов неупорядочен.
- LinkedHashSet — гарантирует, что порядок элементов при обходе коллекции будет идентичен порядку добавления элементов.
- SortedSet->NavigableSet->TreeSet — предоставляет возможность управлять порядком элементов в коллекции при помощи объекта Comparator, либо сохраняет элементы с использованием «natural ordering».
Не может хранить null.
Какие доп.методы есть у TreeSet?
- public NavigableSet<E> **subSet**(E from, boolean fromIncl, E to, boolean toIncl)</E>
- public NavigableSet<E> **tailSet**(E fromElement, boolean inclusive)</E>
- public NavigableSet<E> **headSet**(E toElement, boolean inclusive)</E>
- first()
- last()
Назвать главные реализации Queue
- I AbstractQueue => PriorityQueue — предоставляет возможность управлять порядком элементов в коллекции при помощи объекта Comparator, либо сохраняет элементы с использованием «natural ordering».
- I Deque => ArrayDeque — реализация интерфейса Deque, который расширяет интерфейс Queue методами, позволяющими реализовать конструкцию вида LIFO (last-in-first-out).
- I Deque => LinkedList
Что такое java.util.Collections?
набор статических методов для работы с коллекциями.
Что такое «fail-fast поведение»?
fail-fast поведение означает, что при возникновении ошибки или состояния, которое может привести к ошибке, система немедленно прекращает дальнейшую работу и уведомляет об этом. Использование fail-fast подхода позволяет избежать недетерминированного поведения программы в течение времени.
Что такое fail-fast в контексте коллекций?
В Java Collections API некоторые итераторы ведут себя как fail-fast и выбрасывают ConcurrentModificationException, если после его создания была произведена модификация коллекции, т.е. добавлен или удален элемент напрямую из коллекции, а не используя методы итератора.
Реализация такого поведения осуществляется за счет подсчета количества модификаций коллекции (modification count):
при изменении коллекции счетчик модификаций изменяется;
при создании итератора ему передается текущее значение счетчика;
при каждом обращении к итератору сохраненное значение счетчика сравнивается с текущим, и, если они не совпадают, возникает исключение.
Какая разница между fail-fast и fail-safe?
В противоположность fail-fast, итераторы fail-safe не вызывают никаких исключений при изменении структуры, потому что они работают с клоном коллекции вместо оригинала.
Пример fail-safe & fail-fast
Пример fail-safe - CopyOnWriteArrayList и итератор keySet коллекции ConcurrentHashMap.
Пример fail-fast - Vector и Hashtable.