Ответ
Принцип работы: Set реализует концепцию математического множества, где каждый элемент уникален. Уникальность обеспечивается контрактом методов equals() и hashCode().
Механизм добавления:
- При вызове
add(element)вычисляется хэш-код элемента (hashCode()). - По хэш-коду находится соответствующий «бакет» (в
HashSet) или позиция в структуре данных. - Если в бакете уже есть элементы, происходит проверка на равенство через
equals()с каждым из них. - Если найден равный элемент, новый не добавляется (операция игнорируется).
Пример:
Set<String> fruits = new HashSet<>();
fruits.add("apple");
fruits.add("apple"); // Не добавится, так как элемент уже существует
System.out.println(fruits.size()); // Вывод: 1
System.out.println(fruits); // Вывод: [apple]
Почему это важно: Такой подход позволяет очень быстро (в среднем за O(1) для HashSet) проверять наличие элемента, что делает Set эффективной структурой для хранения уникальных данных.