Расскажите про коллекции в Java
Что проверяют
Ориентируетесь ли вы в иерархии и умеете ли выбирать реализацию под задачу, а не брать ArrayList всегда.
Как отвечать
Каркас строится вокруг двух корней: Collection (списки, множества, очереди) и Map, который стоит отдельно.
List, порядок и дубликаты. ArrayList это массив: доступ по индексу за O(1), вставка в середину дорогая. LinkedList это двусвязный список: вставка по итератору дешёвая, доступ по индексу линейный. На практике ArrayList побеждает почти всегда, потому что лучше ложится на кэш процессора.
Set, уникальность. HashSet без порядка и за O(1), LinkedHashSet хранит порядок вставки, TreeSet держит элементы отсортированными за O(log n).
Map, пары ключ-значение. HashMap, LinkedHashMap, TreeMap по той же логике. Для конкурентного доступа ConcurrentHashMap, а не Collections.synchronizedMap: у первой блокировки посегментные, у второй одна на всё.
Queue и Deque: ArrayDeque вместо Stack и LinkedList, PriorityQueue для очереди с приоритетом, BlockingQueue для передачи задач между потоками.
Как выбирать: нужен порядок и индекс это список, нужна уникальность это множество, нужен поиск по ключу это карта. Дальше вопрос, важен ли порядок и нужна ли сортировка.
Где спотыкаются
Берут LinkedList ради «быстрой вставки», не заметив, что доступ по индексу линейный.
Считают Vector и Hashtable рабочим вариантом для многопоточности.
Не знают, что Arrays.asList возвращает список фиксированного размера, и ловят исключение на add.
Меняют коллекцию во время обхода и получают ConcurrentModificationException.