Что такое интерфейс Set в Java?

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

Ответ

Set — это интерфейс в Java, расширяющий Collection. Он представляет собой коллекцию, не содержащую дубликатов элементов. Более формально, набор не содержит пары элементов e1 и e2, таких что e1.equals(e2).

Основные реализации:

  • HashSet: Хранит элементы в хэш-таблице. Обеспечивает максимально быстрые операции add, remove, contains (в среднем O(1)). Не гарантирует порядок элементов при итерации.
  • LinkedHashSet: Наследует HashSet, но дополнительно хранит элементы в двусвязном списке. Сохраняет порядок вставки элементов.
  • TreeSet: Хранит элементы в красно-черном дереве. Элементы сортируются либо согласно их естественному порядку (интерфейс Comparable), либо с помощью переданного Comparator. Операции выполняются за O(log n).

Пример использования:

Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("Анна");
uniqueNames.add("Борис");
uniqueNames.add("Анна"); // Дубликат не будет добавлен
System.out.println(uniqueNames); // [Анна, Борис] (порядок может быть другим)
System.out.println(uniqueNames.contains("Борис")); // true

// TreeSet для сортировки
Set<Integer> sortedNumbers = new TreeSet<>();
sortedNumbers.add(5);
sortedNumbers.add(1);
sortedNumbers.add(3);
System.out.println(sortedNumbers); // [1, 3, 5]