Что такое коллекция?
«Коллекция» - это структура данных, или объект, который содержит набор объектов одного класса. Каждый из этих объектов в коллекции называется элементом.Классы коллекций являются дженерик-параметрами
Иерархия Коллекций: главные интерфейсы.
На вершине иерархии в 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?
Какие методы добавляет 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.
Описать Механизм Работы List
init capacity = 10.
при заполнении массива создаётся новый x1.5 и туда копируется старый через System.arraycopy();
Назвать главные реализации List
Какие методы ArrayList добавляет в List?
public void trimToSize()public void ensureCapacity(int minCap)Назвать главные реализации Set
Не может хранить null.
Какие доп.методы есть у TreeSet?
Назвать главные реализации Queue
Что такое 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.
Чем различаются Enumeration и Iterator.
Iterator имеет больше методов работы с коллекциями и был специально введен в java2, вместо Enumeration(interface). Рекоммендуется юзать Iterator.
-с помощью Enumeration нельзя добавлять/удалять элементы;
-в Iterator исправлены имена методов для повышения читаемости кода (Enumeration.hasMoreElements() соответствует Iterator.hasNext(), Enumeration.nextElement() соответствует Iterator.next() и т.д);
-Enumeration присутствуют в устаревших классах, таких как Vector/Stack, тогда как Iterator есть во всех современных коллекциях.
Как между собой связаны Iterable и Iterator?
Интерфейс Iterable имеет только один метод - iterator(), который возвращает Iterator.
Как между собой связаны Iterable, Iterator и «foreach»?
Классы, реализующие интерфейс Iterable, могут применяться в конструкции foreach, которая использует Iterator.
Сравните Iterator и ListIterator.
Что произойдет при вызове Iterator.next() без предварительного вызова Iterator.hasNext()?
Если итератор указывает на последний элемент коллекции, то возникнет исключение NoSuchElementException, иначе будет возвращен следующий элемент.