¿Qué se establece en Java?
Recordemos brevemente que la interfaz Set define un conjunto (set). Extiende Collection y define el comportamiento de las colecciones que no permiten elementos duplicados. Por lo tanto, el método add() devuelve falso si se intenta agregar un elemento duplicado al conjunto. La interfaz no define ningún método adicional propio. La interfaz Set se ocupa de la unicidad de los objetos almacenados, la unicidad está determinada por la implementación del método equals() . Por lo tanto, si los objetos de la clase creada se agregarán al Set , es deseable anular el método equals() .Clase LinkedHashSet
Antes de hablar de la clase LinkedHashSet , debemos mencionar su pariente cercano, la clase HashSet . HashSet implementa la interfaz Set . Crea una colección que almacena los elementos en una tabla hash. Los elementos de una tabla hash se almacenan como pares clave-valor. La clave especifica la celda (o segmento) para almacenar el valor. El contenido de la clave se utiliza para determinar un valor único llamado código hash. Podemos pensar en un código hash como un identificador de objeto, aunque no tiene por qué ser único. Este código hash también sirve como índice en el que se almacenan los datos asociados con la clave. La clase Java LinkedHashSet amplía HashSet sin agregar ningún método nuevo.LinkedHashSet le permite verificar rápidamente la existencia de una entrada, al igual que HashSet , pero contiene una lista ordenada en su interior. Esto significa que almacena el orden de inserción de los elementos. En otras palabras, LinkedHashSet mantiene una lista vinculada de elementos del conjunto en el orden en que se insertaron. Esto permite la iteración ordenada de inserción en un conjunto. Pero esto hace que la clase LinkedHashSet realice operaciones más largas que la clase HashSet .Características importantes de LinkedHashSet
-
Podemos almacenar elementos únicos solo en un LinkedHashSet
-
LinketHashSet nos permite extraer elementos en el mismo orden en que los insertamos
-
LinkedHashSet no está sincronizado
-
LinkedHashSet permite almacenar elementos nulos
-
LinkedHashSet utiliza una técnica hash para almacenar elementos en un índice específico basado en un código hash
Métodos LinkedHashSet
Además de los métodos heredados de sus clases principales, HashSet define los siguientes métodos:-
boolean add(Object o) agrega el elemento especificado a este conjunto si aún no está presente.
-
void clear() elimina todos los elementos de este conjunto.
-
Object clone() devuelve una copia superficial de esta instancia de LinkedHashSet : los elementos en sí no se clonan.
-
boolean contains(Object o) devuelve verdadero si este conjunto contiene el elemento especificado.
-
boolean isEmpty() devuelve verdadero si este conjunto no contiene elementos.
-
Iterator iterator() devuelve un iterador sobre los elementos de este conjunto.
-
boolean remove(Object o) elimina el elemento especificado de este conjunto, si está presente.
-
int size() devuelve el número de elementos en este conjunto (su número de elementos).
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetEx1 {
public static void main(String[] args) {
//LinkedHashSet() Init
Set<String> set = new LinkedHashSet<>();
//adding elements to LinkedHashSet
set.add("Re"); //first added element
set.add("Do");
set.add("Fa");
set.add("Sol");
set.add("La");
set.add("Ti");
set.add("Mi");//last added element
System.out.println(set);
}
}
La salida es:

Ejemplo 2. Agregar un duplicado en LinkedHashSet
Pongamos de nuevo nuestro LinkedHashSet 7 elementos con nombres de partituras musicales y pongamos un nuevo elemento que sea el mismo que uno de los elementos colocados antes.
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetEx2 {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("Re");
set.add("Do");
set.add("Fa");
set.add("Sol");
set.add("La");
set.add("Ti");
set.add("Mi");
set.add("Sol");
System.out.println(set);
}
}
La salida del programa está aquí:
Ejemplo 3. Eliminación de elementos de LinkedHashSet
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSet3 {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("Re");
set.add("Do");
set.add("Fa");
set.add("Sol");
set.add("La");
set.add("Ti");
set.add("Mi");
System.out.println(set);
set.remove("Fa");// removing an element from our set
set.remove("Score");//trying to remove element that isn't in set
System.out.println(set.remove("Score"));
System.out.println("Print our set without elements removed: ");
System.out.println(set);
set.clear();
System.out.println("Print out our set after clear command: ");
System.out.println(set);
}
}
La salida del programa está aquí:
LinkedHashSet frente a HashSet
Estas dos clases son parientes cercanos. Sin embargo, dentro de HashSet usa HashMap para almacenar objetos mientras que LinkedHashSet usa LinkedHashMap . Si no necesita mantener el orden de inserción pero necesita almacenar objetos únicos, es más apropiado usar HashSet . Si necesita mantener el orden de inserción de los elementos, LinkedHashSet es su elección. El rendimiento de LinkedHashSet es un poco más lento que HashSet porque LinkedHashSet usa LinkedList interno para mantener el orden de inserción de los elementos. Pongamos un ejemplo:
import java.util.*;
public class LinkedHashSetExample1 {
public static void main(String[] args) {
// while regular hash set orders its elements according to its hashcode stamps
Set<Integer> regularHashSet = new HashSet<>();
regularHashSet.add(7);
regularHashSet.add(3);
regularHashSet.add(5);
regularHashSet.add(65536);
regularHashSet.add(9);
// few duplicates
regularHashSet.add(5);
regularHashSet.add(7);
// next will print:
// > regularHashSet = [65536, 3, 5, 7, 9]
System.out.println("regularHashSet = " + regularHashSet);
// linked hash set keeps order of adding unchanged
Set<Integer> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add(7);
linkedHashSet.add(3);
linkedHashSet.add(5);
linkedHashSet.add(65536);
linkedHashSet.add(9);
// few duplicates
linkedHashSet.add(5);
linkedHashSet.add(7);
// next will print:
// > linkedHashSet = [7, 3, 5, 65536, 9]
System.out.println("linkedHashSet = " + linkedHashSet);
}
}
La salida del programa es:
Uso de Java LinkedHashSet en aplicaciones del mundo real
Dado que LinkedHashSet le permite verificar rápidamente la existencia de una entrada y también almacena el pedido, esta colección parece ser bastante conveniente para eliminar duplicados de una lista. O, por ejemplo, resolver problemas como el último artículo visto recientemente en mi bolso. O, ¿recuerdas un juego así, Pokemon Go? LinkedHashSet puede almacenar una lista de Pokémon que has encontrado y el orden en que se encontraron en tu camino. En este caso, los Pokémon “repetidos” ya no se añadirán a la lista. O, por ejemplo, una lista de jefes por nivel que ya hayas conocido en cualquier juego con niveles. O la historia del descubrimiento de los cuerpos cósmicos. LinkedHashSetle permite verificar rápidamente si un cuerpo espacial ya está en la lista o no, y si no está allí, luego agréguelo a la lista. Tomemos un ejemplo de eliminación de duplicados.
import java.util.*;
class LinkedHashSetExample2 {
public static void main(String[] args) {
List<String> listWithDuplicates = List.of("some","elements","with", "few", "duplicates", "were", "here", "duplicates", "duplicates");
Set<String> linkedHashSet = new LinkedHashSet<>(listWithDuplicates);
List<String> listWithoutDuplicates = new ArrayList<>(linkedHashSet);
// next will print:
// > listWithDuplicates = [some, elements, with, few, duplicates, here, duplicates, duplicates]
System.out.println("listWithDuplicates = " + listWithDuplicates);
// next will print:
// > listWithoutDuplicates = [some, elements, with, few, duplicates, here]
System.out.println("listWithoutDuplicates = " + listWithoutDuplicates);
// -------------------------------------------------------------------------
// while using regular Hash Set will generally produces some unexpected order
Set<String> regularHashSet = new HashSet<>(listWithDuplicates);
// next will print:
// > linkedHashSet = [some, elements, with, few, duplicates, were, here]
System.out.println("linkedHashSet = " + linkedHashSet);
// next will print:
// > regularHashSet = [here, some, with, duplicates, were, elements, few]
System.out.println("regularHashSet = " + regularHashSet);
}
}
La salida del programa está aquí:
GO TO FULL VERSION