Ответ
HashSet — это коллекция, реализующая интерфейс Set и хранящая уникальные элементы. Его внутреннее устройство основано на хэш-таблице, что обеспечивает высокую производительность основных операций.
Ключевые характеристики:
- Уникальность: Не позволяет хранить дубликаты. Попытка добавить существующий элемент игнорируется.
- Отсутствие порядка: Элементы не имеют гарантированного порядка обхода (в отличие от
List). В некоторых реализациях (JavaLinkedHashSet) порядок вставки сохраняется. - Высокая производительность: Операции
add,remove,containsвыполняются в среднем за O(1) (константное время). - Допускает
null(в большинстве реализаций, например, Java).
Пример использования в Java:
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<String> uniqueNames = new HashSet<>();
// Добавление элементов
uniqueNames.add("Анна");
uniqueNames.add("Борис");
boolean isAdded = uniqueNames.add("Анна"); // false, дубликат не добавлен
System.out.println(uniqueNames); // [Анна, Борис] (порядок может быть другим)
// Быстрая проверка наличия
System.out.println(uniqueNames.contains("Борис")); // true
// Удаление
uniqueNames.remove("Анна");
System.out.println(uniqueNames.size()); // 1
}
}
Критически важные требования для объектов, хранящихся в HashSet:
- Корректно переопределённый метод
hashCode(): Должен возвращать одинаковое значение для одинаковых объектов. - Корректно переопределённый метод
equals(): Должен корректно сравнивать объекты на равенство.
Типичные сценарии применения:
- Удаление дубликатов из коллекции.
- Быстрая проверка принадлежности элемента к множеству (например, кеш просмотренных элементов, список стоп-слов).
- Реализация математических операций над множествами (объединение, пересечение).