Java HashSet

Java 集合框架Java Collections Framework

HashSet se basa en HashMap para su implementación, y es una colección que no permite elementos duplicados.

HashSet permite valores null.

HashSet no está ordenado, es decir, no registra el orden de inserción.

HashSet no es seguro para hilos (thread-safe). Si varios hilos intentan modificar HashSet simultáneamente, el resultado final es indeterminado. Debe sincronizar explícitamente el acceso concurrente a HashSet cuando se accede desde múltiples hilos.

HashSet implementa la interfaz Set.

Los elementos en HashSet son en realidad objetos; algunos tipos primitivos comunes pueden usar sus clases envolventes (wrapper).

La tabla de clases envolventes correspondientes a los tipos primitivos es la siguiente:

Tipo primitivoTipo de referencia
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

La clase HashSet se encuentra en el paquete java.util; antes de usarla debe importarse. La sintaxis es la siguiente:

import java.util.HashSet; // 引入 HashSet 类

En el siguiente ejemplo creamos un objeto HashSet llamado sites, para almacenar elementos de tipo String:

HashSet<String> sites = new HashSet<String>();

Añadir elementos

La clase HashSet proporciona muchos métodos útiles; para añadir elementos se puede usar el método add():

Ejemplo

// Importar la clase HashSet
import java.util.HashSet;

public class EjemploTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("Ejemplo");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("Ejemplo");  // Los elementos duplicados no se añadirán
        System.out.println(sites);
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

[Google, Ejemplo, Zhihu, Taobao]

En el ejemplo anterior, Ejemplo se añadió dos veces, pero solo aparecerá una vez en la colección, porque cada elemento de la colección debe ser único.

Comprobar si un elemento existe

Podemos usar el método contains() para comprobar si un elemento existe en la colección:

Ejemplo

// Importar la clase HashSet
import java.util.HashSet;

public class EjemploTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("Ejemplo");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("Ejemplo");  // Los elementos duplicados no se añadirán
        System.out.println(sites.contains("Taobao"));
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

true

Eliminar elementos

Podemos usar el método remove() para eliminar elementos de la colección:

Ejemplo

// Importar la clase HashSet
import java.util.HashSet;

public class EjemploTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("Ejemplo");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("Ejemplo");     // Los elementos duplicados no se añadirán
        sites.remove("Taobao");  // Eliminar elemento; devuelve true si se elimina correctamente, de lo contrario false
        System.out.println(sites);
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

[Google, Ejemplo, Zhihu]

Para eliminar todos los elementos de la colección se puede usar el método clear:

Ejemplo

// Importar la clase HashSet
import java.util.HashSet;

public class EjemploTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("Ejemplo");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("Ejemplo");     // Los elementos duplicados no se añadirán
        sites.clear();  
        System.out.println(sites);
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

[]

Calcular el tamaño

Si desea calcular el número de elementos en HashSet, puede usar el método size():

Ejemplo

// Importar la clase HashSet
import java.util.HashSet;

public class EjemploTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("Ejemplo");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("Ejemplo");     // Los elementos duplicados no se añadirán
        System.out.println(sites.size());  
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

4

Iterar sobre HashSet

Puede usar for-each para iterar sobre los elementos de HashSet.

Ejemplo

// Importar la clase HashSet
import java.util.HashSet;

public class EjemploTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("Ejemplo");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("Ejemplo");     // Los elementos duplicados no se añadirán
        for (String i : sites) {
            System.out.println(i);
        }
    }
}

Al ejecutar el código anterior, el resultado es el siguiente:

Google
Ejemplo
Zhihu
Taobao

Métodos comunes de HashSet

Método Valor de retorno Descripción Ejemplo
add(E e) boolean Añade un elemento a la colección; devuelvetrue, para elementos duplicados devuelvefalse。 set.add("Java");
remove(Object o) boolean Elimina el elemento especificado; devuelvetrue, si el elemento no existe devuelvefalse。 set.remove("Python");
contains(Object o) boolean Comprueba si la colección contiene el elemento especificado. if (set.contains("Java")) { ... }
size() int Devuelve el número de elementos de la colección. int count = set.size();
isEmpty() boolean Determina si la colección está vacía. if (set.isEmpty()) { ... }
clear() void Elimina todos los elementos de la colección. set.clear();
iterator() Iterator<E> Devuelve el iterador de la colección, utilizado para recorrer los elementos. for (String s : set) { ... }
toArray() Object[] Convierte la colección en un array. Object[] arr = set.toArray();
toArray(T[] a) T[] Convierte la colección en un array del tipo especificado. String[] arr = set.toArray(new String[0]);
addAll(Collection<? extends E> c) boolean Añade todos los elementos de otra colección (operación de unión). set.addAll(Arrays.asList("A", "B"));
retainAll(Collection<?> c) boolean Conserva solo los elementos comunes con la colección especificada (operación de intersección). set.retainAll(otherSet);
removeAll(Collection<?> c) boolean Elimina los elementos comunes con la colección especificada (operación de diferencia). set.removeAll(otherSet);

Puede consultar más métodos de API en:https://www.example.com/manual/jdk11api/java.base/java/util/HashSet.html

Java 集合框架Java Collections Framework

Otras extensiones