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 .

  • ємність - Ємність цього хеш-набору дорівнює 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 за допомогою ітератора: 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 не синхронізований. Тобто, якщо декілька потоків отримують доступ до набору хешів одночасно, а один із потоків змінює хеш-набір. Тоді він повинен бути синхронізований зовні.

Цікаві статті...