В этом руководстве мы узнаем о классе 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 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
. Это потому, что всякий раз, когда элемент добавляется вTreeSet
, он должен выполнить операцию сортировки. LinkedHashSet
позволяет вставку нулевых значений. Однако мы не можем вставить нулевое значение вTreeSet
.