"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Explorando HashSet: una inmersión en colecciones desordenadas

Explorando HashSet: una inmersión en colecciones desordenadas

Publicado el 2024-11-08
Navegar:255

Exploring HashSet: A Dive into Unordered Collections

Introducción

La clase HashSet es parte del marco de colecciones de Java y proporciona una colección rápida y desordenada que no permite elementos duplicados. Está construido sobre HashMap, lo que significa que hereda los mismos beneficios de complejidad de tiempo pero se centra exclusivamente en la unicidad del elemento . En este artículo, exploraremos cómo funciona HashSet, qué lo hace único y por qué es diferente de otras colecciones.


¿Qué es un HashSet?

Un HashSet es:

  • Desordenado: Los elementos no tienen una secuencia predecible.
  • Único: Los elementos duplicados se ignoran.
  • Respaldado internamente por un HashMap: Utiliza un HashMap para almacenar elementos, enfocándose solo en las claves mientras descarta valores.
  • O(1) complejidad de tiempo promedio: operaciones como inserción, eliminación y búsqueda son altamente eficientes.

1. Inicializando un HashSet

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));

// Default constructor with default capacity 16
Set set = new HashSet();

Explicación:

  • Constructor predeterminado: Crea un HashSet con una capacidad inicial de 16.
  • Constructor parametrizado: Puede especificar la capacidad inicial, pero tenga en cuenta que la capacidad no es lo mismo que el tamaño. El tamaño se refiere al número real de elementos del conjunto.
  • Uso de una colección: Se puede crear un HashSet a partir de una colección como una lista, lo que garantiza que solo se conserven elementos únicos.

2. Agregar elementos a un HashSet

set.add(1);
set.add(2);
set.add(1); // Duplicate value is ignored
System.out.println(set); // Output -> [1, 2]

Explicación:

  • El método add() inserta elementos en el HashSet.
  • Los elementos duplicados se ignoran. Cuando intentas agregar 1 dos veces, solo se conserva la primera aparición.

Conclusión clave

Si necesita reemplazar valores duplicados en lugar de ignorarlos, HashSet no será la opción correcta. Esto se debe a que prioriza la unicidad del elemento.


3. Comprobación del tamaño frente a la capacidad

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);
System.out.println(setWithInitialCapacity.size()); // Output -> 0

Aunque la capacidad de setWithInitialCapacity es 5, el tamaño es 0 porque el tamaño refleja el número de elementos presentes en el conjunto, no la capacidad inicial. Puedes pensar en la capacidad como el espacio de almacenamiento interno, que se ajusta a medida que se agregan elementos.


4. Usando HashSet con Colecciones

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));
System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]

Explicación:

  • Aunque se proporcionaron tres elementos en la lista (4, 4, 3), el valor duplicado 4 se descartó, dejando solo dos elementos (3 y 4).
  • El orden de los elementos es impredecible porque HashSet no mantiene ninguna inserción ni orden natural.

Si necesita conservar elementos ordenados, considere usar un TreeSet, que garantiza que los elementos estén organizados en orden ascendente.


5. Indexación en HashSet: ¿es posible?

En las entrevistas, una pregunta común es si se puede recuperar un índice de un elemento en un HashSet. La respuesta es No, porque HashSet utiliza un mecanismo de hash para almacenar elementos, no una estructura basada en índices como una lista o una matriz.


Resumen de puntos clave

  1. Desordenado y único: HashSet solo conserva elementos únicos, ignorando los duplicados.
  2. Construido en HashMap: Utiliza las claves de un HashMap interno para almacenar elementos.
  3. Operaciones rápidas: La complejidad del tiempo promedio es O(1) para agregar, eliminar y verificar elementos.
  4. Capacidad vs tamaño: La capacidad es el espacio asignado, mientras que el tamaño es la cantidad real de elementos.
  5. Sin indexación: No puede recuperar elementos por índice debido al mecanismo de hash.

Relación con HashMap

Dado que HashSet está respaldado por un HashMap, utiliza las claves del mapa para almacenar elementos, mientras que los valores son irrelevantes. Es por eso que cada elemento de un HashSet debe ser único, al igual que las claves de un HashMap.


Conclusión

HashSet es una herramienta poderosa cuando necesitas una colección rápida y desordenada que evite duplicados. Si bien ofrece O(1) complejidad temporal para la mayoría de las operaciones, carece de funciones como clasificación e indexación. Para los desarrolladores, saber cómo se relaciona HashSet con HashMap ayuda a comprender su funcionamiento interno y hacer un mejor uso del marco de colecciones.

En la próxima publicación, exploraremos una pregunta común en las entrevistas que se formula con frecuencia en las entrevistas para evaluar el conocimiento de los candidatos sobre los conceptos de colecciones.


Publicaciones relacionadas

  • Fundamentos de Java

  • Conceptos básicos de la entrevista de matriz

  • Conceptos básicos de la memoria Java

¡Feliz codificación!

Declaración de liberación Este artículo se reproduce en: https://dev.to/arshisaxena26/exploring-hashset-a-dive-into-unordered-collections-4ehb?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3