Java LinkedHashSet

En este tutorial, aprenderemos sobre la clase Java LinkedHashSet y sus métodos con la ayuda de ejemplos.

La LinkedHashSetclase del marco de colecciones de Java proporciona funcionalidades tanto de la tabla hash como de la estructura de datos de la lista vinculada.

Implementa la interfaz Set.

Los elementos de LinkedHashSetse almacenan en tablas hash similares a HashSet.

Sin embargo, los conjuntos de hash vinculados mantienen una lista doblemente vinculada internamente para todos sus elementos. La lista vinculada define el orden en el que se insertan los elementos en las tablas hash.

Crear un LinkedHashSet

Para crear un conjunto de hash vinculado, java.util.LinkedHashSetprimero debemos importar el paquete.

Una vez que importamos el paquete, así es como podemos crear conjuntos de hash vinculados en Java.

 // LinkedHashSet with 8 capacity and 0.75 load factor LinkedHashSet numbers = new LinkedHashSet(8, 0.75); 

Aquí, hemos creado un conjunto de hash vinculado llamado números.

Fíjense, la parte new LinkedHashSet(8, 0.75). Aquí, el primer parámetro es la capacidad y el segundo parámetro es loadFactor .

  • capacidad : la capacidad de este conjunto de hash es 8. Es decir, puede almacenar 8 elementos.
  • loadFactor : el factor de carga de este conjunto de hash es 0,6. Esto significa que cada vez que nuestra tabla hash se llena en un 60%, los elementos se mueven a una nueva tabla hash del doble del tamaño de la tabla hash original.

Capacidad y factor de carga predeterminados

Es posible crear un conjunto de hash vinculado sin definir su capacidad y factor de carga. Por ejemplo,

 // LinkedHashSet with default capacity and load factor LinkedHashSet numbers1 = new LinkedHashSet(); 

Por defecto,

  • la capacidad del conjunto de hash vinculado será de 16
  • el factor de carga será 0,75

Creación de LinkedHashSet a partir de otras colecciones

Así es como podemos crear un conjunto de hash vinculado que contenga todos los elementos de otras colecciones.

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

Salida

 ArrayList: (2, 4) LinkedHashSet: (2, 4) 

Métodos de LinkedHashSet

La LinkedHashSetclase proporciona métodos que nos permiten realizar varias operaciones en el conjunto de hash vinculado.

Insertar elementos en LinkedHashSet

  • add() - inserta el elemento especificado en el conjunto de hash vinculado
  • addAll() - inserta todos los elementos de la colección especificada en el conjunto de hash vinculado

Por ejemplo,

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

Salida

 LinkedHashSet: (2, 4, 6) Nuevo LinkedHashSet: (2, 4, 6, 5) 

Acceder a los elementos LinkedHashSet

Para acceder a los elementos de un conjunto de hash vinculado, podemos usar el iterator()método. Para utilizar este método, debemos importar el java.util.Iteratorpaquete. Por ejemplo,

 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(", "); ) ) ) 

Salida

 LinkedHashSet: (2, 5, 6) LinkedHashSet usando Iterator: 2, 5, 6, 

Nota :

  • hasNext()devuelve truesi hay un elemento siguiente en el conjunto de hash vinculado
  • next() devuelve el siguiente elemento en el conjunto de hash vinculado

Eliminar elementos de HashSet

  • remove() - elimina el elemento especificado del conjunto de hash vinculado
  • removeAll() - elimina todos los elementos del conjunto de hash vinculado

Por ejemplo,

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

Salida

LinkedHashSet: (2, 5, 6) ¿Se quitó 5? verdadero ¿Se eliminan todos los elementos? cierto

Establecer operaciones

Los diversos métodos de la LinkedHashSetclase también se pueden utilizar para realizar varias operaciones de conjuntos.

Unión de Conjuntos

Dos realizan la unión entre dos conjuntos, podemos usar el addAll()método. Por ejemplo,

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

Salida

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Union es: (1, 3, 2, 4) 

Intersección de conjuntos

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:

  • La TreeSetclase implementa la SortedSetinterfaz. Por eso se ordenan los elementos de un conjunto de árbol. Sin embargo, la LinkedHashSetclase solo mantiene el orden de inserción de sus elementos.
  • A TreeSetsuele ser más lento que a LinkedHashSet. Es porque cada vez que se agrega un elemento a TreeSet, tiene que realizar la operación de clasificación.
  • LinkedHashSetpermite la inserción de valores nulos. Sin embargo, no podemos insertar un valor nulo en TreeSet.

Articulos interesantes...