English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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。
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
La clase HashSet proporciona diversas métodos, que nos permiten realizar varias operaciones en la colección.
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]
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,
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
Las diversas métodos de HashSet también se pueden utilizar para realizar varias operaciones de conjunto.
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]
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]
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]
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
方法 | 描述 |
---|---|
clone() | 创建HashSet副本 |
contains() | 在中搜索HashSet指定的元素,并返回布尔结果 |
isEmpty() | 检查是否HashSet为空 |
size() | 返回HashSet的大小 |
clear() | 从HashSet中删除所有元素 |
在Java中,如果我们必须随机访问元素,则通常使用HashSet。这是因为哈希表中的元素是使用哈希码访问的。
元素的hashcode是唯一标识,它有助于标识散列表中的元素。
HashSet不能包含重复的元素。因此,每个散列集元素都有一个惟一的hashcode。
注意: HashSet不同步。也就是说,如果多个线程同时访问哈希集合,并且其中一个线程修改了哈希集合。然后,它必须在外部同步。