Как Set в Java обеспечивает уникальность элементов?

«Как Set в Java обеспечивает уникальность элементов?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принцип работы: Set реализует концепцию математического множества, где каждый элемент уникален. Уникальность обеспечивается контрактом методов equals() и hashCode().

Механизм добавления:

  1. При вызове add(element) вычисляется хэш-код элемента (hashCode()).
  2. По хэш-коду находится соответствующий «бакет» (в HashSet) или позиция в структуре данных.
  3. Если в бакете уже есть элементы, происходит проверка на равенство через equals() с каждым из них.
  4. Если найден равный элемент, новый не добавляется (операция игнорируется).

Пример:

Set<String> fruits = new HashSet<>();
fruits.add("apple");
fruits.add("apple"); // Не добавится, так как элемент уже существует
System.out.println(fruits.size()); // Вывод: 1
System.out.println(fruits); // Вывод: [apple]

Почему это важно: Такой подход позволяет очень быстро (в среднем за O(1) для HashSet) проверять наличие элемента, что делает Set эффективной структурой для хранения уникальных данных.