Java LinkedHashSet

В този урок ще научим за класа 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.

  • 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.

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