Для чего используется интерфейс Set в Java?

«Для чего используется интерфейс Set в Java?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Интерфейс Set<E> в Java используется для хранения коллекции уникальных элементов. Он запрещает дубликаты, что является его фундаментальным отличием от List. Set является частью Collections Framework и наследует интерфейс Collection<E>.

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

Реализация Внутренняя структура Порядок элементов Производительность (add/contains/remove)
HashSet Хэш-таблица (на основе HashMap) Не гарантируется O(1) в среднем случае
LinkedHashSet Хэш-таблица + связный список Порядок вставки Немного медленнее HashSet из-за поддержки списка
TreeSet Красно-черное дерево Естественный порядок или порядок заданный Comparator O(log n)

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

Set<String> uniqueWords = new HashSet<>();
uniqueWords.add("hello");
uniqueWords.add("world");
uniqueWords.add("hello"); // Этот элемент добавлен не будет
System.out.println(uniqueWords); // Вывод: [world, hello] (порядок может быть любым)
System.out.println(uniqueWords.contains("world")); // Проверка наличия: true

Типичные сценарии применения:

  • Удаление дубликатов из другой коллекции: List<String> uniqueList = new ArrayList<>(new HashSet<>(listWithDuplicates));
  • Проверка на уникальность (например, уникальные логины пользователей).
  • Математические операции над множествами (объединение, пересечение, разность) через методы addAll, retainAll, removeAll.