Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Clase HashSet de Java: Guía Completa de Operaciones, Métodos y Teoría de Conjuntos

Clase HashSet de Java

Explora la clase HashSet de Java—su creación, métodos principales y operaciones prácticas de conjuntos—a través de ejemplos concisos.

La clase HashSet, parte del Framework de Colecciones de Java, implementa la interfaz Set y ofrece almacenamiento basado en tabla hash.

Clase HashSet de Java: Guía Completa de Operaciones, Métodos y Teoría de Conjuntos

Creando un HashSet

Primero, importa java.util.HashSet:

import java.util.HashSet;

Luego crea un HashSet con capacidad y factor de carga específicos:

HashSet<Integer> numeros = new HashSet<>(8, 0.75); // capacidad=8, loadFactor=0.75

Parámetros:

Usar valores por defecto también es común:

HashSet<Integer> numeros1 = new HashSet<>(); // capacidad=16, factorDeCarga=0.75

Métodos de HashSet

A continuación, los métodos más usados:

Insertando Elementos

Ejemplo usando add y addAll:

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numerosPares = new HashSet<>();
        numerosPares.add(2);
        numerosPares.add(4);
        numerosPares.add(6);
        System.out.println("HashSet: " + numerosPares);
        HashSet<Integer> numeros = new HashSet<>();
        numeros.addAll(numerosPares);
        numeros.add(5);
        System.out.println("Nuevo HashSet: " + numeros);
    }
}

Salida

HashSet: [2, 4, 6] Nuevo HashSet: [2, 4, 5, 6]

Accediendo a Elementos

Itera con Iterator:

import java.util.HashSet;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numeros = new HashSet<>();
        numeros.add(2);
        numeros.add(5);
        numeros.add(6);
        System.out.println("HashSet: " + numeros);
        Iterator<Integer> iterar = numeros.iterator();
        System.out.print("HashSet usando Iterator: ");
        while(iterar.hasNext()) {
            System.out.print(iterar.next() + ", ");
        }
    }
}

Salida

HashSet: [2, 5, 6] HashSet usando Iterator: 2, 5, 6,

Eliminando Elementos

Eliminación individual y limpieza del set:

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numeros = new HashSet<>();
        numeros.add(2);
        numeros.add(5);
        numeros.add(6);
        System.out.println("HashSet: " + numeros);
        boolean eliminado = numeros.remove(5);
        System.out.println("¿Se eliminó 5? " + eliminado);
        boolean limpiado = numeros.removeAll(numeros);
        System.out.println("¿Se eliminaron todos los elementos? " + limpiado);
    }
}

Salida

HashSet: [2, 5, 6] ¿Se eliminó 5? true ¿Se eliminaron todos los elementos? true

Operaciones de Conjunto

Los métodos en lote de HashSet soportan operaciones clásicas de teoría de conjuntos.

Unión

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numerosPares = new HashSet<>();
        numerosPares.add(2);
        numerosPares.add(4);
        HashSet<Integer> numeros = new HashSet<>();
        numeros.add(1);
        numeros.add(3);
        numeros.addAll(numerosPares);
        System.out.println("Unión es: " + numeros);
    }
}

Salida

Unión es: [1, 2, 3, 4]

Intersección

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numerosPrimos = new HashSet<>();
        numerosPrimos.add(2);
        numerosPrimos.add(3);
        HashSet<Integer> numerosPares = new HashSet<>();
        numerosPares.add(2);
        numerosPares.add(4);
        numerosPares.retainAll(numerosPrimos);
        System.out.println("Intersección es: " + numerosPares);
    }
}

Salida

Intersección es: [2]

Diferencia

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numerosPrimos = new HashSet<>();
        numerosPrimos.add(2);
        numerosPrimos.add(3);
        numerosPrimos.add(5);
        HashSet<Integer> numerosImpares = new HashSet<>();
        numerosImpares.add(1);
        numerosImpares.add(3);
        numerosImpares.add(5);
        numerosPrimos.removeAll(numerosImpares);
        System.out.println("Diferencia: " + numerosPrimos);
    }
}

Salida

Diferencia: [2]

Verificación de Subconjunto

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numeros = new HashSet<>();
        numeros.add(1);
        numeros.add(2);
        numeros.add(3);
        numeros.add(4);
        HashSet<Integer> numerosPrimos = new HashSet<>();
        numerosPrimos.add(2);
        numerosPrimos.add(3);
        boolean esSubconjunto = numeros.containsAll(numerosPrimos);
        System.out.println("¿Es numerosPrimos un subconjunto de numeros? " + esSubconjunto);
    }
}

Salida

¿Es numerosPrimos un subconjunto de numeros? true

Métodos Adicionales

MétodoDescripción
clone()Crea una copia superficial del set.
contains()Verifica si existe un elemento.
isEmpty()Devuelve true si el set está vacío.
size()Número de elementos en el set.
clear()Elimina todos los elementos.

Para lista completa, consulta la documentación oficial de Java.

Por Qué Usar HashSet

Cuando se requiere acceso aleatorio, HashSet ofrece rendimiento O(1) gracias a su tabla hash. El hashCode() de cada elemento garantiza unicidad, previniendo duplicados. Sin embargo, HashSet no es thread-safe; se necesita sincronización externa para uso concurrente.

Nota: Como HashSet no está sincronizado, múltiples hilos modificándolo concurrentemente pueden corromper la estructura de datos.

Java

  1. Palabra clave final en Java: Variables, métodos y clases
  2. Operador instanceof en Java: Guía completa
  3. Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
  4. Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
  5. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  6. Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
  7. Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
  8. Dominando los Algoritmos de Colecciones de Java: Ordenación, Mezcla y Más
  9. Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
  10. Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
  11. Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación