Найти в Дзене
JavaForLife

Под "капотом" HashSet

HashSet в Java представляет собой коллекцию, которая не допускает дублирования элементов и не гарантирует порядок хранения элементов. Внутри HashSet используется HashMap, где ключи - это элементы коллекции, а значения - это заглушки (dummy values), которые используются для эффективного хранения элементов.

Когда элемент добавляется в HashSet, он сначала проверяется на наличие в HashMap. Если элемент уже присутствует в HashMap, то он не добавляется в HashSet. Если элемент отсутствует в HashMap, то он добавляется в HashMap как ключ с заглушкой в качестве значения, а затем ключ добавляется в HashSet.

HashSet использует хеш-функцию для вычисления индекса элемента в HashMap. Хеш-функция позволяет быстро найти нужный элемент без необходимости перебора всей коллекции. Кроме того, хеш-функция также позволяет быстро определить, содержится ли элемент в коллекции или нет.

HashSet имеет следующие основные методы:

1. add(E e) - добавляет элемент в коллекцию.

2. remove(Object o) - удаляет элемент из коллекции.

3. contains(Object o) - проверяет, содержит ли коллекция указанный элемент.

4. size() - возвращает количество элементов в коллекции.

5. clear() - удаляет все элементы из коллекции.

6. iterator() - возвращает итератор для перебора элементов коллекции.

Пример:

```java

HashSet<String> set = new HashSet<>();

set.add("apple");

set.add("banana");

set.add("orange");

System.out.println(set); // выводит [orange, banana, apple]

set.remove("banana");

System.out.println(set); // выводит [orange, apple]

System.out.println(set.contains("apple")); // выводит true

System.out.println(set.size()); // выводит 2

set.clear();

System.out.println(set); // выводит []

```

Под капотом HashSet использует HashMap для хранения элементов и быстрой проверки наличия элемента в коллекции. Он также использует хеш-функцию для вычисления индекса элемента в HashMap.