En este tutorial, aprenderemos sobre la clase Java HashSet. Aprenderemos sobre diferentes métodos y operaciones de conjuntos de hash con la ayuda de ejemplos.
La HashSet
clase del marco de colecciones de Java proporciona las funcionalidades de la estructura de datos de la tabla hash.
Implementa la interfaz Set.
Creando un HashSet
Para crear un conjunto de hash, java.util.HashSet
primero debemos importar el paquete.
Una vez que importamos el paquete, así es como podemos crear conjuntos de hash en Java.
// HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75);
Aquí, hemos creado un conjunto de hash llamado numbers
.
Fíjense, la parte nueva HashSet(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, siempre que nuestro conjunto hash se complete 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 una tabla hash sin definir su capacidad y factor de carga. Por ejemplo,
// HashSet with default capacity and load factor HashSet numbers1 = new HashSet();
Por defecto,
- la capacidad del conjunto hash será de 16
- el factor de carga será 0,75
Métodos de HashSet
La HashSet
clase proporciona varios métodos que nos permiten realizar diversas operaciones en el plató.
Insertar elementos en HashSet
add()
- inserta el elemento especificado en el conjuntoaddAll()
- inserta todos los elementos de la colección especificada en el conjunto
Por ejemplo,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) )
Salida
HashSet: (2, 4, 6) Nuevo HashSet: (2, 4, 5, 6)
Acceder a elementos HashSet
Para acceder a los elementos de un conjunto hash, podemos usar el iterator()
método. Para utilizar este método, debemos importar el java.util.Iterator
paquete. Por ejemplo,
import java.util.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) )
Salida
HashSet: (2, 5, 6) HashSet usando Iterator: 2, 5, 6,
Eliminar elementos
remove()
- elimina el elemento especificado del conjuntoremoveAll()
- elimina todos los elementos del conjunto
Por ejemplo,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using 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
HashSet: (2, 5, 6) ¿Se quitó 5? verdadero ¿Se eliminan todos los elementos? cierto
Establecer operaciones
Los diversos métodos de la HashSet
clase también se pueden utilizar para realizar varias operaciones de conjuntos.
Unión de Conjuntos
Para realizar la unión entre dos conjuntos, podemos usar el addAll()
método. Por ejemplo,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) )
Salida
HashSet1: (2, 4) HashSet2: (1, 3) Union es: (1, 2, 3, 4)
Intersección de conjuntos
Para realizar la intersección entre dos conjuntos, podemos usar el retainAll()
método. Por ejemplo
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) )
Salida
HashSet1: (2, 3) HashSet2: (2, 4) La intersección es: (2)
Diferencia de conjuntos
Para calcular la diferencia entre los dos conjuntos, podemos usar el removeAll()
método. Por ejemplo,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) )
Salida
HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Diferencia: (2)
Subconjunto
Para comprobar si un conjunto es un subconjunto de otro conjunto o no, podemos usar el containsAll()
método. Por ejemplo,
import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) )
Salida
HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) ¿HashSet2 es un subconjunto de HashSet1? cierto
Otros métodos de HashSet
Método | Descripción |
---|---|
clone() | Crea una copia del HashSet |
contains() | Busca el HashSet elemento especificado y devuelve un resultado booleano |
isEmpty() | Comprueba si HashSet está vacío |
size() | Devuelve el tamaño del HashSet |
clear() | Elimina todos los elementos del HashSet |
Para obtener más información sobre los métodos HashSet, visite Java HashSet (documentación oficial de Java).
¿Por qué HashSet?
En Java, HashSet
se usa comúnmente si tenemos que acceder a elementos de forma aleatoria. Esto se debe a que se accede a los elementos de una tabla hash mediante códigos hash.
El código hash de un elemento es una identidad única que ayuda a identificar el elemento en una tabla hash.
HashSet
no puede contener elementos duplicados. Por lo tanto, cada elemento del conjunto hash tiene un código hash único.
Nota: HashSet no está sincronizado. Es decir, si varios subprocesos acceden al conjunto de hash al mismo tiempo y uno de los subprocesos modifica el conjunto de hash. Entonces debe estar sincronizado externamente.