[Conceptos básicos de Java] Explicación detallada de Java LinkedHashSet: la elección perfecta para el almacenamiento ordenado de elementos únicos

Insertar descripción de la imagen aquí

El marco de recopilación en Java proporciona una variedad de estructuras de datos para almacenar y manipular datos. LinkedHashSetEs un tipo especial que combina las características de las tablas hash y las listas vinculadas, y es adecuado para situaciones en las que es necesario mantener el orden de inserción de los elementos y garantizar la unicidad. Este blog lo presentará en detalle LinkedHashSet, incluidos sus conceptos, características, uso y código de muestra, con el objetivo de ayudar a los principiantes a comprender y aplicar mejor este tipo de colección.

1. ¿Qué es LinkedHashSet?

LinkedHashSetEs una clase en el marco de colección de Java. Hereda de HashSet, por lo que tiene el rendimiento de búsqueda de una tabla hash, mientras usa una lista vinculada para mantener el orden de inserción de los elementos. Esto significa LinkedHashSettener las siguientes dos propiedades principales:

  • Orden : LinkedHashSetSe mantiene el orden de inserción de los elementos, es decir, el orden en que se agregan los elementos a la colección es el orden en que están en la colección.
  • Unicidad : Igual HashSetque, LinkedHashSetasegurando la unicidad de los elementos y no permitiendo elementos duplicados.

Por lo tanto, LinkedHashSetes una opción ideal para escenarios donde es necesario almacenar elementos únicos en orden de inserción.

2. Creación e inicialización de LinkedHashSet

Para crear un LinkedHashSetobjeto, necesitas inicializarlo usando un constructor. Aquí hay varios métodos de inicialización:

2.1 Constructor predeterminado

LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();

Esto creará un LinkedHashSetobjeto vacío con una capacidad inicial de 16 y un factor de carga de 0,75. Puede ajustar estos parámetros según sea necesario.

2.2 Especificación de capacidad y factores de carga

int initialCapacity = 20;
float loadFactor = 0.5f;
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>(initialCapacity, loadFactor);

Al especificar la capacidad inicial y el factor de carga, puede tener un control más detallado LinkedHashSetsobre el rendimiento y el uso de memoria de .

2.3 Crear a partir de una colección existente

También puede crear una a partir de una colección existente, como Listo para convertir entre diferentes tipos de colecciones:SetLinkedHashSet

Set<String> existingSet = new HashSet<>(Arrays.asList("A", "B", "C"));
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>(existingSet);

Esto inicializará el nuevo utilizando elementos de la colección existente LinkedHashSet.

3. Operaciones básicas: agregar, eliminar y consultar elementos.

LinkedHashSetSe proporcionan operaciones de recopilación comunes, que incluyen agregar, eliminar y consultar elementos. A continuación se muestran algunos ejemplos de operaciones básicas:

3.1 Agregar elementos

Utilice addel método para LinkedHashSetagregar elementos a:

linkedHashSet.add("D");
linkedHashSet.add("E");

3.2 Eliminar elementos

Utilice removeel método para eliminar elementos LinkedHashSetde :

linkedHashSet.remove("B");

3.3 Consultar si existe un elemento

Utilice containsel método para comprobar si existe un elemento en LinkedHashSet:

boolean containsC = linkedHashSet.contains("C");

4. Atravesar LinkedHashSet

La iteración LinkedHashSetsobre los elementos generalmente utiliza un iterador o un bucle for mejorado. A continuación se muestran ejemplos de dos métodos transversales:

4.1 Atravesar usando iteradores

Iterator<String> iterator = linkedHashSet.iterator();
while (iterator.hasNext()) {
    
    
    String element = iterator.next();
    System.out.println(element);
}

4.2 Uso mejorado para recorrido de bucle

for (String element : linkedHashSet) {
    
    
    System.out.println(element);
}

Independientemente del método transversal, LinkedHashSetlos elementos se devolverán en el orden en que fueron insertados, manteniendo así el orden.

5. Consideraciones de rendimiento para LinkedHashSet

LinkedHashSetEl rendimiento es HashSetsimilar a , y la complejidad temporal de encontrar elementos es O (1), que se logra mediante una tabla hash. Pero a diferencia de HashSet, LinkedHashSettambién necesita mantener la estructura de la lista vinculada, por lo que agregar y eliminar elementos puede ser HashSetun poco más lento que . Pero normalmente esta pérdida de rendimiento es insignificante.

Es importante tener en cuenta que LinkedHashSetla configuración inicial de capacidad y factor de carga afectará el rendimiento. Si la capacidad inicial es demasiado pequeña, puede dar lugar a operaciones frecuentes de expansión de capacidad y reducir el rendimiento. Una selección razonable de capacidad y factor de carga puede mejorar el rendimiento y reducir el uso de memoria.

6. Precauciones de uso

LinkedHashSetHay algunas cosas a considerar al usar :

  • LinkedHashSetNo es seguro para subprocesos. Si se usa en un entorno de subprocesos múltiples, se deben considerar los problemas de sincronización de subprocesos o las clases de colección seguras para subprocesos ConcurrentLinkedHashSet.
  • LinkedHashSetEstá permitido almacenar un nullelemento, pero generalmente se recomienda evitar nullalmacenarlo como elemento válido para evitar confusiones y errores.
  • Cuando utilice un objeto personalizado como LinkedHashSetelemento, debe implementar hashCode()los métodos y equals()correctamente para garantizar la unicidad y corrección del objeto en la colección.
  • LinkedHashSetEl rendimiento suele ser muy alto, pero al procesar grandes cantidades de datos, se debe prestar atención a la configuración del factor de carga para evitar operaciones de expansión frecuentes.

7. Ejemplo de LinkedHashSet

Demostremos el escenario de uso con un código de muestra LinkedHashSet:

7.1 Almacenamiento de la lista de estudiantes

Supongamos que queremos almacenar una lista de estudiantes y asegurarnos de que el nombre de cada estudiante sea único y esté en el orden en que fueron agregados. Podemos LinkedHashSethacer esto usando:

LinkedHashSet<String> studentNames = new LinkedHashSet<>();

studentNames.add("Alice");
studentNames.add("Bob");
studentNames.add("Charlie");
studentNames.add("Alice"); // 这个重复的元素将被忽略

for (String name : studentNames) {
    
    
    System.out.println(name);
}

Producción:

Alice
Bob
Charlie

7.2 Registrar el historial de visitas al sitio web

Supongamos que queremos registrar el historial de visitas de los usuarios al sitio web y mantener el orden de las visitas. Podemos utilizar LinkedHashSetpara almacenar estos registros:

LinkedHashSet<String> visitHistory = new LinkedHashSet<>();

visitHistory.add("Homepage");
visitHistory.add("About Us");
visitHistory.add("Products");
visitHistory.add("Contact Us");

for (String page : visitHistory) {
    
    
    System.out.println("Visited: " + page);
}

Producción:

Visited: Homepage
Visited: About Us
Visited: Products
Visited: Contact Us

8. Más usos de LinkedHashSet

Al utilizar LinkedHashSet, además de las operaciones básicas, existen algunos métodos y técnicas de uso más, a continuación se muestran algunos de ellos:

8.1 Obtener el tamaño de LinkedHashSet

Puede utilizar size()el método para obtener LinkedHashSetla cantidad de elementos en:

int size = linkedHashSet.size();

Esto puede ayudarle a comprender el tamaño de su colección para que pueda tomar el control y la optimización adecuados al procesar sus datos.

8.2 Determinar si LinkedHashSet está vacío

Utilice isEmpty()el método para comprobar LinkedHashSetsi está vacío; devolverá si no hay elementos en la colección; truede lo contrario, devolverá false:

boolean isEmpty = linkedHashSet.isEmpty();

Esto es útil al escribir lógica condicional para realizar diferentes acciones en función de si una colección está vacía.

8.3 Borrar LinkedHashSet

Si necesita borrar LinkedHashSettodos los elementos en , puede utilizar clear()el método:

linkedHashSet.clear();

Esto hará que la colección esté vacía y se eliminarán todos los elementos.

8.4 Copiar LinkedHashSet

Si necesita crear una LinkedHashSetcopia, puede utilizar el constructor o clone()método:

LinkedHashSet<String> copySet = new LinkedHashSet<>(linkedHashSet);
// 或者
LinkedHashSet<String> copySet = (LinkedHashSet<String>) linkedHashSet.clone();

Esto clonará la colección original, lo que le permitirá trabajar en ella sin afectar la colección original.

8.5 Convertir a matriz

Puede LinkedHashSetconvertir los elementos en una matriz para obtener más flexibilidad con sus datos:

String[] array = linkedHashSet.toArray(new String[0]);

Esto devolverá una matriz que contiene los elementos de la colección. También puede elegir el tipo y tamaño de la matriz según sus necesidades.

8.6 Comparación de LinkedHashSets

Para comparar dos LinkedHashSetpor igualdad, puedes usar equals()el método. Dos LinkedHashSetse consideran iguales cuando tienen los mismos elementos y están dispuestos en el mismo orden.

LinkedHashSet<String> set1 = new LinkedHashSet<>(Arrays.asList("苹果", "香蕉", "橙子"));
LinkedHashSet<String> set2 = new LinkedHashSet<>(Arrays.asList("苹果", "香蕉", "橙子"));

boolean isEqual = set1.equals(set2); // 返回 true

8.7 Eliminación de elementos mediante iteradores

Como se mencionó anteriormente, el uso de iteradores puede eliminar elementos de forma segura y evitar ConcurrentModificationExceptionexcepciones.

Iterator<String> iterator = linkedHashSet.iterator();
while (iterator.hasNext()) {
    
    
    String element = iterator.next();
    if (element.equals("B")) {
    
    
        iterator.remove(); // 安全删除元素
    }
}

Estos métodos y técnicas de uso adicionales pueden ayudarlo a procesar datos de manera más flexible LinkedHashSety satisfacer diferentes necesidades de programación. Ya sea para obtener el tamaño de una colección, borrar una colección o crear una copia de una colección, Java LinkedHashSetproporciona una gran cantidad de funciones para satisfacer una variedad de necesidades.

9. Resumen

LinkedHashSetEs una estructura de datos de almacenamiento de elementos única y ordenada en el marco de recopilación de Java. Hereda de HashSet, por lo que tiene las propiedades de búsqueda rápida de una tabla hash y utiliza una lista vinculada para mantener el orden de inserción de los elementos. Esto lo hace útil en situaciones en las que necesita mantener los elementos ordenados y únicos.

Al utilizar LinkedHashSet, puede controlar la capacidad y los factores de carga según sea necesario para equilibrar el rendimiento y el uso de memoria. Además, asegúrese de implementar sus métodos hashCode()y objetos personalizados equals()para que la unicidad del elemento se maneje correctamente.

Ya sea que necesite almacenar listas de estudiantes, registrar el historial de visitas al sitio web u otros elementos únicos organizados, LinkedHashSetes una opción confiable que puede ayudarlo a resolver estos problemas fácilmente. Espero que este blog pueda ayudar a los principiantes a comprenderlo y aplicarlo mejor LinkedHashSety mejorar sus habilidades de programación Java.

Supongo que te gusta

Origin blog.csdn.net/qq_21484461/article/details/132818993
Recomendado
Clasificación