Java HashSet

В този урок ще научим за класа Java HashSet. Ще научим за различни методи и операции на хеш набор с помощта на примери.

В HashSetкласа на рамката на Java Колекции осигурява функциите на структурата на данните на хеш-таблица.

Той реализира интерфейса 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 .

  • капацитет - Капацитетът на този хеш набор е 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 не е синхронизиран. Това е, ако множество нишки имат достъп до набора хеш едновременно и една от нишките модифицира набора хеш. Тогава той трябва да бъде външно синхронизиран.

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