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

«Для чего используется Set в Java?» — вопрос из категории Java, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java Set — это интерфейс коллекции, предназначенный для хранения только уникальных элементов. Он не допускает дубликатов, что делает его незаменимым для задач, где требуется гарантировать уникальность данных.

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

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

Пример использования для удаления дубликатов:

List<String> namesWithDuplicates = Arrays.asList("Alice", "Bob", "Alice", "Charlie");
Set<String> uniqueNames = new HashSet<>(namesWithDuplicates);
System.out.println(uniqueNames); // Вывод: [Alice, Bob, Charlie] (порядок может быть любым)

Типичные сценарии использования Set:

  • Удаление дубликатов из коллекции.
  • Быстрая проверка принадлежности элемента к множеству (например, кэш обработанных ID).
  • Математические операции над множествами (объединение, пересечение, разность) с помощью методов addAll, retainAll, removeAll.