Коллекции 3 Flashcards
Что такое коллекции в Java
Коллекции в Java — это фреймворк, который предоставляет архитектуру для хранения и управления группой объектов.
Он включат в себя интерфейсы, классы и методы обеспечивающие реализацию различных структур данных, такие как списки, множества и map.
Какие основные интерфейсы входят в фреймворк коллекций
Основные интерфейсы фреймворка коллекций:
Collection (родительский интерфейс)
List
Set
Queue
Map (не наследует Collection).
Какая разница между интерфейсами List, Set и Map
List: хранит элементы в определенном порядке и позволяет хранить дубликаты. Set: не допускает дубликатов и не гарантирует порядка.
Map: хранит пары ‘ключ-значение’ и не допускает дублирование ключей но допускает дубликаты значений.
Какие реализации интерфейса List существуют в Java
Основные реализации интерфейса List:
ArrayList — динамический массив; быстрый доступ по индексу но медленное удаление/вставка в середину.
LinkedList — двусвязный список; быстрая вставка/удаление но медленный доступ по индексу. Vector — синхронизированный аналог ArrayList. Используется редко.
Чем отличается ArrayList от LinkedList
ArrayList основан на массиве, обеспечивает быстрый доступ по индексу но вставка/удаление в середину или начало списка медленные.
LinkedList основан на двусвязном списке обеспечивает быструю вставку и удаление элементов в любом месте но медленный доступ по индексу.
В чем разница между HashSet и TreeSet
HashSet:
элементы не упорядочены;
основан на хэш-таблице;
не допускает дубликатов.
TreeSet:
элементы отсортированы в порядке возрастания;
основан на красно-черном дереве;
также не допускает дубликатов.
Что такое HashMap и как он работает
HashMap — это реализация интерфейса Map которая хранит данные в виде пар ‘ключ-значение’.
Для хранения и быстрого доступа к элементам используется хеширование.
Ключи HashMap должны быть уникальными, но значения могут дублироваться.
Чем отличается HashMap от TreeMap
HashMap хранит элементы без определенного порядка. TreeMap хранит элементы в отсортированном порядке (по возрастанию ключей) и реализован с использованием красно-черного дерева.
Объясните что такое ConcurrentHashMap и зачем он нужен
ConcurrentHashMap — это потокобезопасная версия HashMap которая использует сегментацию для улучшения производительности в многопоточной среде.
В отличие от синхронизированной HashMap, ConcurrentHashMap позволяет нескольким потокам читать и записывать данные одновременно.
Какие основные методы предоставляет интерфейс Collection
add(E e): добавляет элемент
remove(Object o): удаляет элемент
contains(Object o): проверяет наличие элемента
size(): возвращает количество элементов
clear(): очищает коллекцию.
В чем отличие между Iterator и ListIterator
Iterator позволяет обходить коллекцию только в одном направлении (вперед). ListIterator позволяет обходить список в обоих направлениях (вперед и назад) и изменять элементы во время обхода.
Что такое Comparator и Comparable и в чем их различия
Comparable — интерфейс для естественной сортировки объектов метод compareTo() реализуется в самом классе. Comparator — интерфейс для кастомной сортировки метод compare() реализуется в отдельном классе и позволяет задавать разные критерии сортировки.
Как работает метод hashCode() и зачем он нужен в коллекциях
Метод hashCode() возвращает хеш-код объекта и используется для быстрого поиска в коллекциях на основе хеширования (например в HashMap HashSet). Если два объекта равны (equals() возвращает true) их хеш-коды должны совпадать.
Объясните принцип работы HashMap при коллизиях.
HashMap использует цепочки (связные списки) для разрешения коллизий. Если несколько ключей имеют одинаковый хеш-код они попадают в один бакет (ячейку) и сохраняются в виде связного списка. Начиная с Java 8 если список слишком длинный он преобразуется в дерево (красно-черное) что повышает производительность.
В чем разница между synchronized коллекциями (Vector, Hashtable) и коллекциями из пакета java.util.concurrent
Коллекции из java.util.concurrent (например ConcurrentHashMap) позволяют более гибкую синхронизацию и увеличивают производительность в многопоточной среде так как блокируют только часть структуры а не всю коллекцию.
Synchronized коллекции (Vector, Hashtable) блокируют весь объект что может создавать узкие места.