Являются ли коллизии особенностью работы списков (List) в Java?

«Являются ли коллизии особенностью работы списков (List) в Java?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, коллизии не являются особенностью или проблемой списков (List). Коллизии — это концепция, связанная с хэш-таблицами (как в HashMap или HashSet).

Различия в структурах данных:

Структура Основной принцип Проблема коллизий
List (например, ArrayList) Упорядоченная коллекция, хранящая элементы по индексу. Отсутствует. Элементы хранятся независимо, дубликаты разрешены.
HashMap / HashSet Хранение пар ключ-значение (или просто значений) на основе хэш-кода ключа. Присутствует. Разные ключи могут дать одинаковый хэш-код и попасть в одну ячейку (bucket).

Пример списка (коллизий нет):

List<String> list = new ArrayList<>();
list.add("apple");
list.add("apple"); // Это дубликат, а не коллизия. Он разрешён и хранится как отдельный элемент.
System.out.println(list.size()); // 2

Пример коллизии в HashMap:

HashMap<String, Integer> map = new HashMap<>();
// Два разных ключа могут иметь одинаковый хэш-код.
// Внутри HashMap это разрешается через цепочки (списки) или деревья в одной корзине.
map.put("Aa", 1); // Хэш-код для "Aa" = 2112
map.put("BB", 2); // Хэш-код для "BB" = 2112 -> КОЛЛИЗИЯ

Вывод: Коллизии — это особенность хэширования, а не списков. Списки работают с индексами, а хэш-коллекции — с хэш-кодами.