hashset java tutorial with programming examples
Este tutorial explica qué es HashSet en Java, los métodos HashSet, cómo implementarlo e iterarlo y otros conceptos relacionados con la ayuda de ejemplos de programación:
Un HashSet es una colección que almacena objetos. El HashSet en Java se implementa mediante la clase 'HashSet' del paquete java.util.
Esta clase implementa una interfaz establecida. Utiliza HashTable, que es una instancia de HashMap para el almacenamiento.
=> Eche un vistazo a la guía para principiantes de Java aquí.
Lo que vas a aprender:
Java HashSet
Algunas de las características de HashSet se detallan a continuación:
- Implementa una interfaz Set que tiene HashTable como estructura interna. HashTable, a su vez, es una instancia de HashMap.
- No conserva el orden de los elementos. Los elementos se almacenan en orden aleatorio.
- HashSet no permite valores duplicados.
- Implementa una interfaz Cloneable y Serializable además de la interfaz Set.
- Podemos tener valores nulos en HashSet.
Jerarquía de clases HashSet
La jerarquía de la clase HashSet se da a continuación:

Como se muestra en la figura anterior, la clase HashSet extiende la clase AbstractSet que a su vez implementa la interfaz Set. La interfaz de conjunto hereda la interfaz de Colección que a su vez extiende la interfaz Iterable.
La versión de Java 8 introdujo un nuevo método 'Divisor' en HashSet que crea un spliterator a prueba de fallas que realiza un enlace tardío sobre los elementos del HashSet.
La declaración general de la clase HashSet es:
La clase pública HashSet extiende el conjunto de implementos AbstractSet,
Clonable, serializable
Importar HashSet
Podemos incluir la funcionalidad HashSet en el programa usando la declaración de importación como se muestra a continuación:
import java.util.HashSet;
o
import java.util.*;
Declarar HashSet en Java
Podemos crear un objeto HashSet en Java como se indica a continuación:
HashSet h = nuevo HashSet ();
La clase HashSet proporciona los siguientes constructores para crear objetos.
| Prototipo de constructor | Descripción | |
|---|---|---|
| retirar | Eliminación booleana (Objeto o) | Elimina el elemento dado o del HashSet si es parte del HashSet. |
| HashSet () | Constructor predeterminado para HashSet | |
| HashSet (capacidad int) | Construye un objeto HashSet con la 'capacidad' dada. | |
| HashSet (capacidad int, factor de carga flotante) | Construye un objeto HashSet con la 'capacidad' y el 'factor de carga' dados. | |
| HashSet (Colección c) | Construya un objeto HashSet a partir de una colección determinada. |
Como se muestra en la tabla anterior, además del constructor predeterminado, esta clase también proporciona los constructores que toman la capacidad y el factor de carga y otra colección como argumentos. Podemos crear los objetos de esta clase usando cualquiera de estos constructores.
Inicializar HashSet
El siguiente código Java muestra la declaración e inicialización del objeto de la clase HashSet. En este programa, creamos un objeto de clase HashSet a partir de un ArrayList. Inicialmente, creamos e inicializamos ArrayList y luego usamos este ArrayList para crear e inicializar un objeto HashSet.
|_+_|Producción:

¿Cómo funciona HashSet internamente en Java?
Internamente, se implementa mediante una HashTable. HashTable es una instancia de HashMap. Pero HashMap es una colección de pares clave-valor. Entonces, ¿cómo almacenamos HashSet en un HashMap?
Los valores de objeto de HashSet son las claves del HashMap.
Ejemplo de Java HashSet
Veamos un ejemplo detallado de HashSet en Java.
|_+_|Producción:

Aquí, usamos el constructor predeterminado para crear un objeto HashSet. Luego, usando el método add, agregamos elementos (colores) al HashSet. A continuación, usamos un iterador para recorrer el HashSet e imprimir el contenido.
Iterador HashSet
En Java, HashSet se puede recorrer o iterar de dos formas, como se explica a continuación.
Sin usar iterador
Aquí, no definimos un iterador en el HashSet. En su lugar, usamos un bucle forEach. El siguiente programa muestra el recorrido de HashSet usando un bucle forEach.
|_+_|Producción:

Utilizando Iterator
El siguiente enfoque de iterar es usar un iterador. Aquí, definimos un iterador para la clase HashSet y luego lo atravesamos.
El siguiente programa muestra este enfoque.
|_+_|Producción:

Métodos HashSet / API
La siguiente tabla muestra los métodos proporcionados por la clase HashSet. Hemos proporcionado el prototipo y la descripción de cada método. Como se ve, tenemos métodos para operaciones básicas como agregar, eliminar, tamaño, etc., así como para otros métodos para verificar el contenido, el vacío, el iterador, el separador, etc.
| Método | Prototipo de método | Descripción |
|---|---|---|
| agregar | Suma booleana (E e) | Agrega el elemento e dado al HashSet si aún no está presente. |
| claro | Vacío claro () | Borra o elimina todos los elementos del HashSet |
| clon | Clonar objeto () | Se utiliza para devolver una copia superficial de esta instancia de HashSet: los elementos en sí no se clonan. |
| contiene | Booleano contiene (Objeto o) | Comprueba si el HashSet contiene el objeto dado o y devuelve verdadero en caso afirmativo. |
| esta vacio | Boolean isEmpty () | Comprueba si el HashSet está vacío. Devuelve verdadero si es así. |
| iterador | Iterador iterador () | Devuelve un iterador que se usa para recorrer el HashSet. |
| Talla | Tamaño int () | Devuelve el tamaño o la cantidad de elementos presentes en el HashSet. |
| disidente | Spliterator spliterator () | Devuelve un spliterator de enlace tardío y rápido para atravesar el HashSet. Este método se introdujo en Java 8. |
Hemos descrito los métodos proporcionados por la clase HashSet, ahora implementemos un ejemplo que demuestre los métodos principales de la clase.
El siguiente programa Java demuestra los métodos de esta clase.
|_+_|Producción:

Convertir HashSet en matriz
Podemos usar el método toArray () de HashSet para convertir el HashSet dado en una matriz. Tenga en cuenta que el tipo de datos y el tamaño de la matriz deben coincidir con los de HashSet.
El siguiente programa Java muestra esta conversión.
|_+_|Producción:

Ordenar un HashSet
Podemos ordenar un HashSet en Java. Los elementos de HashSet no se ordenan originalmente ya que no mantienen el orden de los elementos. Podemos seguir dos enfoques para ordenar un HashSet en Java.
Usando el método Collections.sort ()
En este enfoque, convertimos el HashSet en una lista. Luego, usamos el método Collections.sort () para ordenar la lista. Luego se imprime esta lista.
|_+_|Producción:
preguntas de la entrevista core java para principiantes

Al convertir HashSet en TreeSet
Con este enfoque, convertimos el HashSet en TreeSet. TreeSet mantiene el orden de los elementos. Por lo tanto, cuando el HashSet se convierte en TreeSet, los elementos se ponen en orden.
El siguiente programa Java muestra esta conversión ordenando así el HashSet.
|_+_|Producción:

Analicemos ahora algunas de las diferencias entre HashSet y HashMap. También discutiremos las diferencias entre HashSet y TreeSet.
HashSet Vs HashMap
La siguiente tabla muestra las principales diferencias entre HashSet y HashMap.
| HashSet | HashMap |
|---|---|
| Los objetos se agregan mediante el método Add (). | HashMap usa el método put () para agregar pares clave-valor. |
| Implementa la interfaz Set. | Implementa la interfaz del mapa. |
| Almacena objetos de un tipo particular. | Almacene pares de datos clave-valor. |
| No permite valores duplicados de objetos. | Permite valores duplicados pero no claves duplicadas. |
| Puede tener un solo valor nulo. | Permite una única clave nula y varios valores nulos. |
| Utiliza internamente HashMap Object para almacenar datos. | Utiliza la técnica de hash para almacenar datos. |
| Es más lento en comparación con HashMap. | HashMap es más rápido. |
HashSet Vs TreeSet
A continuación se enumeran las diferencias entre HashSet y TreeSet.
| HashSet | TreeSet |
|---|---|
| Tiene una funcionalidad limitada. | Proporciona muchas funciones que ofrecen varias operaciones y hace que sea más fácil usar Treeset que HashSet. |
| No mantiene el orden de los elementos. Almacena objetos en orden aleatorio. | Mantiene el orden natural de los elementos. |
| Permite valores nulos. | No puede tener valores nulos. |
| Ofrece un mejor rendimiento, ya que requiere un tiempo constante para las operaciones básicas. | Ofrece un costo de log n time para operaciones básicas. |
| Mucho más rápido que Treeset. | Treeset es más lento. |
| Implementado internamente usando HashMap. | Treeset se implementa internamente mediante el uso de Treemap navegable. |
| Utiliza el método equals () para la comparación. | Utiliza el método compareTo () para la comparación. |
Preguntas frecuentes
P # 1) ¿Cómo funciona HashSet en Java?
Responder: HashSet en Java usa HashMap para almacenar el objeto. Se crea un objeto HashMap cuando se crea un objeto HashSet. Los elementos u objetos ingresados en el HashSet se almacenan como claves en el HashMap.
P # 2) ¿HashSet está ordenado en Java?
Responder: No, no está ordenado en Java. Almacena elementos en orden aleatorio.
P # 3) ¿HashSet permite nulos?
Responder: sí, permite un único valor nulo. Esto significa que solo un elemento u objeto puede ser nulo y no todos.
P # 4) ¿Por qué se usa HashSet en Java?
Responder: Se utiliza para almacenar pares clave-valor en Java. Es similar a HashTable con la excepción de que HashSet no está sincronizado y, a diferencia de HashTable, permite valores nulos y una única clave nula. HashSet no está ordenado y se puede usar para almacenar objetos desordenados o cuando el orden de los objetos no es necesario.
P # 5) ¿HashSet está sincronizado en Java?
Responder: El HashSet no está sincronizado en Java. Además, no es seguro para subprocesos. Pero podemos sincronizarlo usando el método synchronizedSet ().
Conclusión
HashSet es una colección que contiene objetos que están en orden aleatorio. La clase HashSet que implementa HashSet en Java usa internamente HashTable que implementa HashMap.
Vimos la declaración e inicialización de HashSet junto con los métodos proporcionados por la clase HashSet.
=> Lea la serie de formación Easy Java.
Lectura recomendada
- Java Double - Tutorial con ejemplos de programación
- Tutorial de Java Float con ejemplos de programación
- Cadena inversa de Java: tutorial con ejemplos de programación
- TreeSet en Java: Tutorial con ejemplos de programación
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java
- Tutorial del método Java String contains () con ejemplos
- TreeMap en Java - Tutorial con ejemplos de Java TreeMap
- Matriz irregular en Java - Tutorial con ejemplos