В этом руководстве мы узнаем о классе Java HashSet. Мы узнаем о различных методах и операциях с хеш-наборами на примерах.
HashSet
Класс рамок Java Collections обеспечивает функциональные структуры данных хеш - таблицы.
Он реализует интерфейс Set.
Создание HashSet
Чтобы создать хэш-набор, мы должны java.util.HashSet
сначала импортировать пакет.
После импорта пакета вот как мы можем создавать хеш-наборы в Java.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Здесь мы создали хэш-набор с именем numbers
.
Обратите внимание, деталь новая HashSet(8, 0.75)
. Здесь первый параметр - это емкость , а второй - loadFactor .
- capacity - Емкость этого хэш-набора равна 8. Это означает, что он может хранить 8 элементов.
- loadFactor - коэффициент загрузки этого хеш-набора составляет 0,6. Это означает, что всякий раз, когда наш хеш-набор заполняется на 60%, элементы перемещаются в новую хеш-таблицу, размер которой в два раза превышает размер исходной хеш-таблицы.
Емкость и коэффициент загрузки по умолчанию
Можно создать хеш-таблицу без определения ее емкости и коэффициента загрузки. Например,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
По умолчанию,
- емкость хеш-набора будет 16
- коэффициент загрузки составит 0,75
Методы HashSet
HashSet
Класс предоставляет различные методы , которые позволяют выполнять различные операции на множестве.
Вставить элементы в HashSet
add()
- вставляет указанный элемент в наборaddAll()
- вставляет все элементы указанной коллекции в набор
Например,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) )
Вывод
HashSet: (2, 4, 6) Новый HashSet: (2, 4, 5, 6)
Доступ к элементам HashSet
Чтобы получить доступ к элементам хеш-набора, мы можем использовать iterator()
метод. Чтобы использовать этот метод, мы должны импортировать java.util.Iterator
пакет. Например,
import java.util.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements 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 numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) )
Вывод
HashSet: (2, 5, 6) 5 удалено? true Все элементы удалены? правда
Установить операции
Различные методы HashSet
класса также могут использоваться для выполнения различных операций над наборами.
Союз множеств
Чтобы выполнить объединение двух наборов, мы можем использовать addAll()
метод. Например,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + 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 primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Вывод
HashSet1: (2, 3) HashSet2: (2, 4) Пересечение: (2)
Разница наборов
Чтобы рассчитать разницу между двумя наборами, мы можем использовать removeAll()
метод. Например,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Вывод
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Разница: (2)
Подмножество
Чтобы проверить, является ли набор подмножеством другого набора или нет, мы можем использовать этот containsAll()
метод. Например,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) )
Вывод
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Является ли HashSet2 подмножеством HashSet1? правда
Другие методы HashSet
Метод | Описание |
---|---|
clone() | Создает копию HashSet |
contains() | Ищет HashSet указанный элемент и возвращает логический результат |
isEmpty() | Проверяет HashSet , пусто ли |
size() | Возвращает размер HashSet |
clear() | Удаляет все элементы из HashSet |
Чтобы узнать больше о методах HashSet, посетите Java HashSet (официальная документация Java).
Почему HashSet?
В Java HashSet
обычно используется, если нам нужно получить доступ к элементам случайным образом. Это связано с тем, что доступ к элементам хэш-таблицы осуществляется с помощью хэш-кодов.
Хэш-код элемента - это уникальный идентификатор, который помогает идентифицировать элемент в хеш-таблице.
HashSet
не может содержать повторяющиеся элементы. Следовательно, каждый элемент хэш-набора имеет уникальный хэш-код.
Примечание: HashSet не синхронизируется. То есть, если несколько потоков обращаются к хеш-набору одновременно, и один из потоков изменяет хеш-набор. Затем он должен быть синхронизирован извне.