English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In this tutorial, we will learn about the Java HashSet class. We will learn different hash set methods and operations with examples.
The Java Collections framework's HashSet class provides the functionality of the hash table data structure.
It implementsSet interface.
To create a hash set, we must first import the java.util.HashSet package.
After importing the package, you can create a hash set in Java.
// HashSet with 8 capacity and 0.75 load factor HashSet<Integer> numbers = new HashSet<>(8, 0.75);
Here, we create a hash set named numbers.
Note, the new part HashSet<>(8, 0.75). Here, the first parameter isCapacityand the second parameter isLoad factor.
capacity - The capacity of this hash set is 8. This means that it can store 8 elements.
loadFactor - The load factor of this hash set is 0.6. This means that as soon as our hash set is filled to 60%, elements will be moved to a new hash table, which is twice the size of the original hash table.
Default capacity and load factor
Создание хеш-таблицы без определения ее емкости и фактора загрузки возможно. Например,
// HashSet сdefault емкостью и фактором загрузки HashSet<Integer> numbers1 = new HashSet<>();
по умолчанию
емкость хеш-сета будет равна 16
фактор загрузки будет равен 0.75
Класс HashSet предоставляет различные методы, которые позволяют нам выполнять различные операции над集合ом.
add() - Вставка указанного элемента в набор
addAll() - Вставка всех элементов указанного набора в набор
например:
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> evenNumber = new HashSet<>(); // использование метода add() evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet<Integer> numbers = new HashSet<>(); // использование метода addAll() numbers.addAll(evenNumber); numbers.add(5); System.out.println("Новый HashSet: " + numbers); } }
Результат вывода
HashSet: [2, 4, 6] Новый HashSet: [2, 4, 5, 6]
Чтобы получить доступ к элементам хеш-сета, мы можем использовать метод iterator(). Для использования этого метода我们必须 импортировать пакет java.util.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() Iterator<Integer> iterate = numbers.iterator(); System.out.print("использование HashSet с Iterator: "); // доступ к элементам while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Результат вывода
HashSet: [2, 5, 6] использование HashSet с Iterator: 2, 5, 6
remove() - Удаление указанного элемента из набора
removeAll() - Удаление всех элементов из набора
например:
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); //Использование метода remove() boolean value1 = numbers.remove(5); System.out.println("Удален ли элемент с значением 5? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Удалили все элементы? " + value2); } }
Результат вывода
HashSet: [2, 5, 6] Удален ли элемент с значением 5? true Удалили все элементы? true
Различные методы класса HashSet также могут использоваться для выполнения различных операций над множествами.
Чтобы выполнить объединение между двумя множествами, мы можем использовать метод addAll(). Например
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> evenNumbers = new HashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet<Integer> numbers = new HashSet<>(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); //Объединение множеств numbers.addAll(evenNumbers); System.out.println("Объединение: " + numbers); } }
Результат вывода
HashSet1: [2, 4] HashSet2: [1, 3] Объединение: [1, 2, 3, 4]
Чтобы выполнить交集 между двумя множествами, мы можем использовать метод retainAll(). Например
import java.util.HashSet; class Main { public static void main(String[] args) { HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers)} HashSet<Integer> evenNumbers = new HashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); //Объединение множеств evenNumbers.retainAll(primeNumbers); System.out.println("Объединение: " + evenNumbers); } }
Результат вывода
HashSet1: [2, 3] HashSet2: [2, 4] Объединение: [2]
Чтобы вычислить разность между двумя множествами, мы можем использовать метод removeAll(). Например,
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); System.out.println("HashSet1: " + primeNumbers)} HashSet<Integer> oddNumbers = new HashSet<>(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); //Разность между HashSet1 и HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Разность: " + primeNumbers); } }
Результат вывода
HashSet1: [2, 3, 5] HashSet2: [1, 3, 5] Разность: [2]
Чтобы проверить, является ли один набор подмножеством другого, можно использовать метод containsAll(). Например,
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); System.out.println("HashSet1: " + numbers); HashSet<Integer> primeNumbers = new HashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); //Проверка, является ли primeNumbers подмножеством numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("HashSet2 является подмножеством HashSet1? " + result); } }
Результат вывода
HashSet1: [1, 2, 3, 4] HashSet2: [2, 3] HashSet2 является подмножеством HashSet1? true
Методы | Описание |
---|---|
clone() | Создать копию HashSet |
contains() | Искать指定的 элемент в HashSet и вернуть булево значение |
isEmpty() | Проверить, пуст ли HashSet |
size() | Вернуть размер HashSet |
clear() | Удалить все элементы из HashSet |
В Java, если нам нужно случайный доступ к элементам, то обычно используется HashSet. Это потому, что элементы хэш-таблицы доступы по хэш-коду.
Hashcode является уникальным идентификатором, который помогает идентифицировать элементы хэш-таблицы.
HashSet не может содержать повторяющиеся элементы. Поэтому у каждого элемента хэш-сборника есть уникальный хэш-код.
Внимание: HashSet не синхронизирован. Это означает, что если несколько потоков одновременноアクセス к хэш-сборнику и один поток изменяет хэш-сборник, то он должен быть синхронизирован внешне.