Ответ
Интерфейс 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.