У цьому підручнику ми дізнаємося про клас 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 thanHashSet
. This is becauseLinkedHashSet
maintains linked lists internally. - The performance of
LinkedHashSet
is slower thanHashSet
. It is because of linked lists present inLinkedHashSet
.
LinkedHashSet Vs. TreeSet
Here are the major differences between LinkedHashSet
and TreeSet
:
TreeSet
Клас реалізуєSortedSet
інтерфейс. Ось чому елементи у наборі дерев сортуються. ОднакLinkedHashSet
клас підтримує лише порядок вставки своїх елементів.- A
TreeSet
зазвичай повільніше, ніж aLinkedHashSet
. Це тому, що щоразу, коли елемент додається до aTreeSet
, він повинен виконати операцію сортування. LinkedHashSet
дозволяє вставляти нульові значення. Однак ми не можемо вставити нульове значення вTreeSet
.