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