Java HashSet

В этом руководстве мы узнаем о классе 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 не синхронизируется. То есть, если несколько потоков обращаются к хеш-набору одновременно, и один из потоков изменяет хеш-набор. Затем он должен быть синхронизирован извне.

Интересные статьи...