Java HashSet
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 primitivo | Tipo de referencia |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
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
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
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
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
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
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
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
Otras extensiones
Java Collections Framework