Класс Java HashSet: полное руководство по операциям, методам и теории множеств
Класс Java HashSet
Изучите класс Java HashSet — его создание, основные методы и практические операции над множествами — через лаконичные примеры.
Класс HashSet, часть Java Collections Framework, реализует интерфейс Set и предлагает хранилище на основе хеш-таблицы.
Создание HashSet
Сначала импортируйте java.util.HashSet:
import java.util.HashSet;
Затем создайте HashSet с конкретной ёмкостью и коэффициентом загрузки:
HashSet<Integer> numbers = new HashSet<>(8, 0.75); // capacity=8, loadFactor=0.75
Параметры:
- capacity — начальное количество корзин (8 в этом примере).
- loadFactor — порог, запускающий ресайз (0.75 означает ресайз при заполнении 75%).
Использование значений по умолчанию также распространено:
HashSet<Integer> numbers1 = new HashSet<>(); // capacity=16, loadFactor=0.75
Методы HashSet
Ниже приведены наиболее часто используемые методы:
add(T element)— вставляет один элемент.addAll(Collection<? extends T> c)— массовая вставка.remove(Object o)— удаляет конкретный элемент.removeAll(Collection<? extends Object> c)— очищает множество элементов.contains(Object o)— проверяет наличие.size()— количество элементов.clear()— удаляет все записи.clone()— создаёт поверхностную копию.isEmpty()— проверяет пустоту.containsAll(Collection<? extends Object> c)— проверка подмножества.
Вставка элементов
Пример с add и addAll:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> evenNumber = new HashSet<>();
evenNumber.add(2);
evenNumber.add(4);
evenNumber.add(6);
System.out.println("HashSet: " + evenNumber);
HashSet<Integer> numbers = new HashSet<>();
numbers.addAll(evenNumber);
numbers.add(5);
System.out.println("New HashSet: " + numbers);
}
}
Вывод
HashSet: [2, 4, 6] New HashSet: [2, 4, 5, 6]
Доступ к элементам
Итерируйте с Iterator:
import java.util.HashSet;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
numbers.add(2);
numbers.add(5);
numbers.add(6);
System.out.println("HashSet: " + numbers);
Iterator<Integer> iterate = numbers.iterator();
System.out.print("HashSet using Iterator: ");
while(iterate.hasNext()) {
System.out.print(iterate.next() + ", ");
}
}
}
Вывод
HashSet: [2, 5, 6] HashSet using Iterator: 2, 5, 6,
Удаление элементов
Одиночное удаление и очистка множества:
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
numbers.add(2);
numbers.add(5);
numbers.add(6);
System.out.println("HashSet: " + numbers);
boolean removed = numbers.remove(5);
System.out.println("Is 5 removed? " + removed);
boolean cleared = numbers.removeAll(numbers);
System.out.println("Are all elements removed? " + cleared);
}
}
Вывод
HashSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true
Операции над множествами
Массовые методы HashSet поддерживают классические операции теории множеств.
Объединение (Union)
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> evenNumbers = new HashSet<>();
evenNumbers.add(2);
evenNumbers.add(4);
HashSet<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(3);
numbers.addAll(evenNumbers);
System.out.println("Union is: " + numbers);
}
}
Вывод
Union is: [1, 2, 3, 4]
Пересечение (Intersection)
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> primeNumbers = new HashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
HashSet<Integer> evenNumbers = new HashSet<>();
evenNumbers.add(2);
evenNumbers.add(4);
evenNumbers.retainAll(primeNumbers);
System.out.println("Intersection is: " + evenNumbers);
}
}
Вывод
Intersection is: [2]
Разность (Difference)
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> primeNumbers = new HashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
primeNumbers.add(5);
HashSet<Integer> oddNumbers = new HashSet<>();
oddNumbers.add(1);
oddNumbers.add(3);
oddNumbers.add(5);
primeNumbers.removeAll(oddNumbers);
System.out.println("Difference: " + primeNumbers);
}
}
Вывод
Difference: [2]
Проверка подмножества (Subset Check)
import java.util.HashSet;
class Main {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
HashSet<Integer> primeNumbers = new HashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
boolean isSubset = numbers.containsAll(primeNumbers);
System.out.println("Is primeNumbers a subset of numbers? " + isSubset);
}
}
Вывод
Is primeNumbers a subset of numbers? true
Дополнительные методы
| Метод | Описание |
|---|---|
clone() | Создаёт поверхностную копию множества. |
contains() | Проверяет существование элемента. |
isEmpty() | Возвращает true, если множество пусто. |
size() | Количество элементов в множестве. |
clear() | Удаляет все элементы. |
Для полного списка обратитесь к официальной документации Java.
Зачем использовать HashSet?
Когда требуется произвольный доступ, HashSet предлагает производительность O(1) благодаря своей хеш-таблице. hashCode() каждого элемента гарантирует уникальность, предотвращая дубликаты. Однако HashSet не потокобезопасен; внешняя синхронизация необходима для параллельного использования.
Примечание: Поскольку HashSet несинхронизирован, одновременная модификация несколькими потоками может повредить структуру данных.
java
- Ключевое слово final в Java: переменные, методы и классы
- Оператор instanceof в Java: полное руководство с примерами
- Статические вложенные классы в Java: использование, отличия и примеры
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Паттерн Singleton в Java: как реализовать и безопасно использовать
- Рефлексия в Java: инспекция классов, методов и полей во время выполнения
- Освоение алгоритмов Java Collections: сортировка, перемешивание и многое другое
- Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
- Освоение Java Generics: создание переиспользуемого, типобезопасного кода
- Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление