Коллекции 3 Flashcards

1
Q

Что такое коллекции в Java

A

Коллекции в Java — это фреймворк, который предоставляет архитектуру для хранения и управления группой объектов.
Он включат в себя интерфейсы, классы и методы обеспечивающие реализацию различных структур данных, такие как списки, множества и map.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие основные интерфейсы входят в фреймворк коллекций

A

Основные интерфейсы фреймворка коллекций:
Collection (родительский интерфейс)
List
Set
Queue
Map (не наследует Collection).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какая разница между интерфейсами List, Set и Map

A

List: хранит элементы в определенном порядке и позволяет хранить дубликаты. Set: не допускает дубликатов и не гарантирует порядка.
Map: хранит пары ‘ключ-значение’ и не допускает дублирование ключей но допускает дубликаты значений.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какие реализации интерфейса List существуют в Java

A

Основные реализации интерфейса List:
ArrayList — динамический массив; быстрый доступ по индексу но медленное удаление/вставка в середину.
LinkedList — двусвязный список; быстрая вставка/удаление но медленный доступ по индексу. Vector — синхронизированный аналог ArrayList. Используется редко.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Чем отличается ArrayList от LinkedList

A

ArrayList основан на массиве, обеспечивает быстрый доступ по индексу но вставка/удаление в середину или начало списка медленные.
LinkedList основан на двусвязном списке обеспечивает быструю вставку и удаление элементов в любом месте но медленный доступ по индексу.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

В чем разница между HashSet и TreeSet

A

HashSet:
элементы не упорядочены;
основан на хэш-таблице;
не допускает дубликатов.
TreeSet:
элементы отсортированы в порядке возрастания;
основан на красно-черном дереве;
также не допускает дубликатов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое HashMap и как он работает

A

HashMap — это реализация интерфейса Map которая хранит данные в виде пар ‘ключ-значение’.
Для хранения и быстрого доступа к элементам используется хеширование.
Ключи HashMap должны быть уникальными, но значения могут дублироваться.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Чем отличается HashMap от TreeMap

A

HashMap хранит элементы без определенного порядка. TreeMap хранит элементы в отсортированном порядке (по возрастанию ключей) и реализован с использованием красно-черного дерева.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Объясните что такое ConcurrentHashMap и зачем он нужен

A

ConcurrentHashMap — это потокобезопасная версия HashMap которая использует сегментацию для улучшения производительности в многопоточной среде.
В отличие от синхронизированной HashMap, ConcurrentHashMap позволяет нескольким потокам читать и записывать данные одновременно.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Какие основные методы предоставляет интерфейс Collection

A

add(E e): добавляет элемент
remove(Object o): удаляет элемент
contains(Object o): проверяет наличие элемента
size(): возвращает количество элементов
clear(): очищает коллекцию.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

В чем отличие между Iterator и ListIterator

A

Iterator позволяет обходить коллекцию только в одном направлении (вперед). ListIterator позволяет обходить список в обоих направлениях (вперед и назад) и изменять элементы во время обхода.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что такое Comparator и Comparable и в чем их различия

A

Comparable — интерфейс для естественной сортировки объектов метод compareTo() реализуется в самом классе. Comparator — интерфейс для кастомной сортировки метод compare() реализуется в отдельном классе и позволяет задавать разные критерии сортировки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как работает метод hashCode() и зачем он нужен в коллекциях

A

Метод hashCode() возвращает хеш-код объекта и используется для быстрого поиска в коллекциях на основе хеширования (например в HashMap HashSet). Если два объекта равны (equals() возвращает true) их хеш-коды должны совпадать.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Объясните принцип работы HashMap при коллизиях.

A

HashMap использует цепочки (связные списки) для разрешения коллизий. Если несколько ключей имеют одинаковый хеш-код они попадают в один бакет (ячейку) и сохраняются в виде связного списка. Начиная с Java 8 если список слишком длинный он преобразуется в дерево (красно-черное) что повышает производительность.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

В чем разница между synchronized коллекциями (Vector, Hashtable) и коллекциями из пакета java.util.concurrent

A

Коллекции из java.util.concurrent (например ConcurrentHashMap) позволяют более гибкую синхронизацию и увеличивают производительность в многопоточной среде так как блокируют только часть структуры а не всю коллекцию.
Synchronized коллекции (Vector, Hashtable) блокируют весь объект что может создавать узкие места.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что такое fail-fast и fail-safe поведение итераторов

A

Fail-fast итераторы (например у ArrayList, HashMap) выбрасывают ConcurrentModificationException если коллекция изменяется во время итерации.
Fail-safe итераторы (например у ConcurrentHashMap, CopyOnWriteArrayList) создают копию коллекции для итерации что позволяет избегать исключений при изменении структуры.

17
Q

Как работает метод computeIfAbsent в Map

A

Метод computeIfAbsent проверяет есть ли значение по указанному ключу.
Если нет он вычисляет значение с помощью предоставленной функции и сохраняет его в map. Если значение присутствует оно не изменяется.

18
Q

Что такое CopyOnWriteArrayList и когда его стоит использовать

A

CopyOnWriteArrayList — потокобезопасный список в котором любые изменения (добавление, удаление элементов) создают копию списка. Он эффективен в сценариях когда преобладают операции чтения над операциями записи, например в многопоточной среде.

19
Q

Какие структуры данных используются для реализации PriorityQueue и Deque

A

PriorityQueue обычно реализуется с помощью кучи (Heap) чтобы поддерживать элементы в порядке приоритетов. Deque (двусторонняя очередь) может реализовываться как двусвязный список или массив что позволяет добавлять и удалять элементы с обоих концов очереди.

20
Q

Какое отличие в использовании ArrayDeque и LinkedList как очередей

A

ArrayDeque быстрее LinkedList в большинстве операций так как он реализован на массиве и не имеет накладных расходов на создание узлов. LinkedList более гибок так как поддерживает двусвязные узлы и может работать как стек, очередь или список.