HashSet de Java

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 HashSetclase 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.HashSetprimero 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 HashSetclase proporciona varios métodos que nos permiten realizar diversas operaciones en el plató.

Insertar elementos en HashSet

  • add() - inserta el elemento especificado en el conjunto
  • addAll() - 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.Iteratorpaquete. 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 conjunto
  • removeAll() - 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 HashSetclase 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 HashSetelemento especificado y devuelve un resultado booleano
isEmpty() Comprueba si HashSetestá 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, HashSetse 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.

HashSetno 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.

Articulos interesantes...