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 .

  • capacity - Емкость этого хэш-набора равна 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) 

Пересечение множеств

To perform the intersection between two sets, we can use the retainAll() method. For example

 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); ) ) 

Output

 LinkedHashSet1: (2, 3) LinkedHashSet2: (2, 4) Intersection is: (2) 

Difference of Sets

To calculate the difference between the two sets, we can use the removeAll() method. For example,

 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); ) ) 

Output

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (1, 3, 5) Difference: (2) 

Subset

To check if a set is a subset of another set or not, we can use the containsAll() method. For example,

 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); ) ) 

Output

 LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) Is LinkedHashSet2 is a subset of LinkedHashSet1? true 

Other Methods Of LinkedHashSet

Method Description
clone() Creates a copy of the LinkedHashSet
contains() Searches the LinkedHashSet for the specified element and returns a boolean result
isEmpty() Checks if the LinkedHashSet is empty
size() Returns the size of the LinkedHashSet
clear() Removes all the elements from the 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. Это потому, что всякий раз, когда элемент добавляется в TreeSet, он должен выполнить операцию сортировки.
  • LinkedHashSetпозволяет вставку нулевых значений. Однако мы не можем вставить нулевое значение в TreeSet.

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