En este tutorial, aprenderemos sobre la clase Java LinkedHashSet y sus métodos con la ayuda de ejemplos.
La LinkedHashSet
clase 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 LinkedHashSet
se 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.LinkedHashSet
primero 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 LinkedHashSet
clase 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 vinculadoaddAll()
- 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.Iterator
paquete. 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()
devuelvetrue
si hay un elemento siguiente en el conjunto de hash vinculadonext()
devuelve el siguiente elemento en el conjunto de hash vinculado
Eliminar elementos de HashSet
remove()
- elimina el elemento especificado del conjunto de hash vinculadoremoveAll()
- 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 LinkedHashSet
clase 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 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
:
- La
TreeSet
clase implementa laSortedSet
interfaz. Por eso se ordenan los elementos de un conjunto de árbol. Sin embargo, laLinkedHashSet
clase solo mantiene el orden de inserción de sus elementos. - A
TreeSet
suele ser más lento que aLinkedHashSet
. Es porque cada vez que se agrega un elemento aTreeSet
, tiene que realizar la operación de clasificación. LinkedHashSet
permite la inserción de valores nulos. Sin embargo, no podemos insertar un valor nulo enTreeSet
.