English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo Java

Java Array

Java Orientado a Objetos (I)

Java Orientado a Objetos (II)

Java Orientado a Objetos (III)

Manejo de excepciones de Java

Java Lista (List)

Java Queue (cola)

Conjunto Map de Java

Conjunto Set de Java

Java Entrada Salida (I/O)

Reader de Java/Writer

Otras temáticas de Java

Java HashSet 类

En este tutorial, aprenderemos la clase HashSet de Java. Aprenderemos diferentes métodos y operaciones del conjunto de hash mediante ejemplos.

La clase HashSet del Java Collections Framework proporciona las funciones de estructura de tabla de dispersión.

ImplementaInterfaz Set

Crear un conjunto de hash

Para crear un conjunto de hash, primero debemos importar el paquete java.util.HashSet.

Después de importar el paquete, se puede crear un conjunto de hash en Java.

//Con8de capacidad y 0.75HashSet con factor de carga
HashSet<Integer> numbers = new HashSet<>(8, 0.75);

Aquí, creamos un conjunto de hash llamado numbers.

Tenga en cuenta, el nuevo HashSet<>(8, 0.75)。 Aquí, el primer parámetro esCapacidady el segundo parámetro esFactor de carga

  • capacity -La capacidad de este conjunto de hash es8。 Esto significa que puede almacenar8elementos.

  • loadFactor - El factor de carga de este conjunto de hash es 0.6。 Esto significa que tan pronto como nuestro conjunto de hash esté lleno60%,los elementos se trasladarán a una nueva tabla de dispersión, que será el doble de grande que la tabla de dispersión original.

Capacidad predeterminada y factor de carga

Es posible crear una tabla de dispersión sin definir su capacidad y factor de carga. Por ejemplo,

//HashSet con capacidad predeterminada y factor de carga
HashSet<Integer> numbers1 = new HashSet<>();

Por defecto,

  • La capacidad del conjunto de hash será 16

  • El factor de carga será 0.75

Métodos de HashSet

La clase HashSet proporciona diversas métodos, que nos permiten realizar varias operaciones en la colección.

Insertar el elemento en HashSet

  • add() - Insertar el elemento especificado en la colección

  • addAll() - Insertar todos los elementos de la colección especificada en la colección

Por ejemplo,

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> evenNumber = new HashSet<>();
        // Usar el método add()
        evenNumber.add(2);
        evenNumber.add(4);
        evenNumber.add(6);
        System.out.println("HashSet: ", + evenNumber);
        HashSet<Integer> numbers = new HashSet<>();
        
        // Usar el método addAll()
        numbers.addAll(evenNumber);
        numbers.add(5);
        System.out.println("New HashSet: ", + numbers);
    }
}

输出结果

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

Acceder a los elementos de HashSet

Para acceder a los elementos de la colección de hash, podemos usar el método iterator(). Para usar este método, debemos importar el paquete java.util.Iterator. Por ejemplo,

import java.util.HashSet;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("HashSet: ", + numbers);
        // Llamar al método iterator()
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("Usar HashSet con Iterator: ",
        //Acceder a los elementos
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

输出结果

HashSet: [2, 5, 6]
Usar HashSet con Iterator: 2, 5, 6,

Eliminar el elemento

  • remove() - Eliminar el elemento especificado de la colección

  • removeAll() - Eliminar todos los elementos de la colección

Por ejemplo,

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("HashSet: ", + numbers);
        //Usar el método remove()
        boolean valor1 = numbers.remove(5);
        System.out.println("Valor",5¿Se eliminó? ", + valor1);
        boolean valor2 = numbers.removeAll(numbers);
        System.out.println("¿Se han eliminado todos los elementos? ", + valor2);
    }
}

输出结果

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

Métodos de operación de conjunto

Las diversas métodos de HashSet también se pueden utilizar para realizar varias operaciones de conjunto.

unión de conjunto Set

Para realizar la unión entre dos conjuntos, podemos usar el método addAll(). Por ejemplo

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("HashSet1: " + System.out.println("intersección: ",
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(3);
        System.out.println("HashSet2: " + numbers);
        //unión de conjunto
        numbers.addAll(evenNumbers);
        System.out.println("la unión es: ", + numbers);
    }
}

输出结果

HashSet1: [2, 4]
HashSet2: [1, 3]
la unión es: [1, 2, 3, 4]

intersección de conjunto Set

Para realizar la intersección entre dos conjuntos, podemos usar el método retainAll(). Por ejemplo

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("HashSet1: " + primeNumbers);
        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("HashSet2: " + System.out.println("intersección: ",
        //intersección del conjunto
        evenNumbers.retainAll(primeNumbers);
        evenNumbers); + System.out.println("intersección: ",
    }
}

输出结果

HashSet1: [2, 3]
HashSet2: [2, 4]
intersección: [2]

diferencia de conjunto Set

Para calcular la diferencia entre dos conjuntos, podemos usar el método removeAll(). Por ejemplo,

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        primeNumbers.add(5);
        System.out.println("HashSet1: " + primeNumbers);
        HashSet<Integer> oddNumbers = new HashSet<>();
        oddNumbers.add(1);
        oddNumbers.add(3);
        oddNumbers.add(5);
        System.out.println("HashSet2: " + oddNumbers);
        //HashSet1y HashSet2diferencia entre los dos conjuntos
        primeNumbers.removeAll(oddNumbers);
        System.out.println("diferencia: ", + primeNumbers);
    }
}

输出结果

HashSet1: [2, 3, 5]
HashSet2: [1, 3, 5]
diferencia: [2]

subconjunto de conjunto Set

Para verificar si un conjunto es un subconjunto de otro, podemos usar el método containsAll(). Por ejemplo,

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("HashSet1: " + numbers);
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("HashSet2: " + primeNumbers);
        //verificar si primeNumbers es un subconjunto de numbers
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("HashSet2是HashSet1¿es un subconjunto? " + result);
    }
}

输出结果

HashSet1: [1, 2, 3, 4]
HashSet2: [2, 3]
HashSet2是HashSet1的子集吗? true

HashSet的其他方法

方法描述
clone()创建HashSet副本
contains()在中搜索HashSet指定的元素,并返回布尔结果
isEmpty()检查是否HashSet为空
size()返回HashSet的大小
clear()从HashSet中删除所有元素

为什么选择HashSet?

在Java中,如果我们必须随机访问元素,则通常使用HashSet。这是因为哈希表中的元素是使用哈希码访问的。

元素的hashcode是唯一标识,它有助于标识散列表中的元素。

HashSet不能包含重复的元素。因此,每个散列集元素都有一个惟一的hashcode。

注意: HashSet不同步。也就是说,如果多个线程同时访问哈希集合,并且其中一个线程修改了哈希集合。然后,它必须在外部同步。