Java LinkedHashSet

У цьому підручнику ми дізнаємося про клас Java LinkedHashSet та його методи за допомогою прикладів.

LinkedHashSetКлас рамках колекції Java забезпечує функціональні можливості як хеш - таблиці і пов'язаної структури даних списку.

Він реалізує інтерфейс Set.

Елементи LinkedHashSetзберігаються в хеш-таблицях, подібних до HashSet.

Однак пов'язані хеш-набори підтримують подвійно пов'язаний список внутрішньо для всіх його елементів. Зв’язаний список визначає порядок вставки елементів у хеш-таблиці.

Створіть LinkedHashSet

Для того, щоб створити пов'язаний хеш-набір, java.util.LinkedHashSetспочатку потрібно імпортувати пакет.

Як тільки ми імпортуємо пакет, ось як ми можемо створювати зв’язані хеш-набори в Java.

 // LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75); 

Тут ми створили пов’язаний хеш-набір з іменами чисел.

Зверніть увагу, частина new LinkedHashSet(8, 0.75). Тут першим параметром є ємність, а другим параметром loadFactor .

  • ємність - Ємність цього хеш-набору дорівнює 8. Значення, він може зберігати 8 елементів.
  • loadFactor - коефіцієнт навантаження цього хеш-набору становить 0,6. Це означає, що всякий раз, коли наша хеш-таблиця заповнюється на 60%, елементи переміщуються до нової хеш-таблиці подвійного розміру вихідної хеш-таблиці.

Потужність та коефіцієнт навантаження за замовчуванням

Можна створити зв’язаний хеш-набір, не визначаючи його ємності та коефіцієнта завантаження. Наприклад,

 // LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet(); 

За замовчуванням,

  • ємність зв’язаного хеш-набору складе 16
  • коефіцієнт навантаження складе 0,75

Створення LinkedHashSet з інших колекцій

Ось як ми можемо створити пов’язаний хеш-набір, що містить усі елементи інших колекцій.

 import java.util.LinkedHashSet; import java.util.ArrayList; class Main ( public static void main(String() args) ( // Creating an arrayList of even numbers ArrayList evenNumbers = new ArrayList(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // Creating a LinkedHashSet from an ArrayList LinkedHashSet numbers = new LinkedHashSet(evenNumbers); System.out.println("LinkedHashSet: " + numbers); ) ) 

Вихідні дані

 ArrayList: (2, 4) LinkedHashSet: (2, 4) 

Методи LinkedHashSet

LinkedHashSetКлас надає методи, що дозволяють виконувати різні операції на пов'язаному хеш - набору.

Вставити елементи в LinkedHashSet

  • add() - вставляє вказаний елемент у зв’язаний хеш-набір
  • addAll() - вставляє всі елементи зазначеної колекції у зв’язаний хеш-набір

Наприклад,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumber = new LinkedHashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet numbers = new LinkedHashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New LinkedHashSet: " + numbers); ) ) 

Вихідні дані

 LinkedHashSet: (2, 4, 6) Новий LinkedHashSet: (2, 4, 6, 5) 

Доступ до елементів LinkedHashSet

Для доступу до елементів зв’язаного хеш-набору ми можемо використовувати iterator()метод. Для використання цього методу ми повинні імпортувати java.util.Iteratorпакет. Наприклад,

 import java.util.LinkedHashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Calling the iterator() method Iterator iterate = numbers.iterator(); System.out.print("LinkedHashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Вихідні дані

 LinkedHashSet: (2, 5, 6) LinkedHashSet за допомогою Iterator: 2, 5, 6, 

Примітка :

  • hasNext()повертає, trueякщо у зв’язаному хеш-наборі є наступний елемент
  • next() повертає наступний елемент у зв'язаному хеш-наборі

Видаліть елементи з HashSet

  • remove() - видаляє вказаний елемент із зв’язаного хеш-набору
  • removeAll() - видаляє всі елементи зі зв'язаного хеш-набору

Наприклад,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Using the 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); ) ) 

Вихідні дані

LinkedHashSet: (2, 5, 6) Вилучено 5? true Чи всі елементи видалено? правда

Набір операцій

Різні методи LinkedHashSetкласу також можуть бути використані для виконання різних наборів операцій.

Спілка наборів

Два виконують об’єднання двох наборів, ми можемо скористатися addAll()методом. Наприклад,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet1: " + evenNumbers); LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(3); System.out.println("LinkedHashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) ) 

Вихідні дані

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Союз: (1, 3, 2, 4) 

Перетин множин

Щоб виконати перетин між двома множинами, ми можемо використати retainAll()метод. Наприклад

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet evenNumbers = new LinkedHashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) ) 

Вихідні дані

 LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Перетин: (2) 

Різниця наборів

Для обчислення різниці між двома наборами ми можемо скористатися removeAll()методом. Наприклад,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet oddNumbers = new LinkedHashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); // Difference between LinkedHashSet1 and LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) ) 

Вихідні дані

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Різниця: (2) 

Підмножина

Щоб перевірити, чи є набір підмножиною іншого набору чи ні, ми можемо скористатися containsAll()методом. Наприклад,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result); ) ) 

Вихідні дані

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Чи є LinkedHashSet2 підмножиною LinkedHashSet1? правда

Інші методи LinkedHashSet

Метод Опис
clone() Створює копію LinkedHashSet
contains() Шукає LinkedHashSetвказаний елемент і повертає логічний результат
isEmpty() Перевіряє, чи LinkedHashSetне пусто
size() Повертає розмір LinkedHashSet
clear() Видаляє всі елементи з LinkedHashSet

To learn more about LinkedHashSet methods, visit Java LinkedHashSet (official Java documentation).

LinkedHashSet Vs. HashSet

Both LinkedHashSet and HashSet implements the Set interface. However, there exist some differences between them.

  • LinkedHashSet maintains a linked list internally. Due to this, it maintains the insertion order of its elements.
  • The LinkedHashSet class requires more storage than HashSet. This is because LinkedHashSet maintains linked lists internally.
  • The performance of LinkedHashSet is slower than HashSet. It is because of linked lists present in LinkedHashSet.

LinkedHashSet Vs. TreeSet

Here are the major differences between LinkedHashSet and TreeSet:

  • TreeSetКлас реалізує SortedSetінтерфейс. Ось чому елементи у наборі дерев сортуються. Однак LinkedHashSetклас підтримує лише порядок вставки своїх елементів.
  • A TreeSetзазвичай повільніше, ніж a LinkedHashSet. Це тому, що щоразу, коли елемент додається до a TreeSet, він повинен виконати операцію сортування.
  • LinkedHashSetдозволяє вставляти нульові значення. Однак ми не можемо вставити нульове значення в TreeSet.

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