В този урок ще научим за класа Java LinkedHashSet и неговите методи с помощта на примери.
В LinkedHashSetкласа на колекции рамките на Java предоставя функции, както на HashTable и свързан структурата на данните в този списък.
Той реализира интерфейса 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 Elements
За достъп до елементите на свързан хеш набор можем да използваме 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.
LinkedHashSetmaintains a linked list internally. Due to this, it maintains the insertion order of its elements.- The
LinkedHashSetclass requires more storage thanHashSet. This is becauseLinkedHashSetmaintains linked lists internally. - The performance of
LinkedHashSetis 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.








