Método add() de Java HashSet
add()El método esHashSetuno de los métodos más utilizados de la clase, su función es agregar un elemento al conjunto.
Sintaxis del método
Descripción de parámetros
E e: El elemento a agregar al conjunto
Valor de retorno
- Si el conjuntono contieneeste elemento, la adición es exitosa y devuelve
true - Si el conjuntoya contieneeste elemento, no se agregará y devuelve
false
Ejemplo básico
Ejemplo
public class HashSetExample {
public static void main(String[] args) {
// Crear un HashSet
HashSet<String> fruits = new HashSet<>();
// Agregar elementos
boolean isAdded1 = fruits.add("Apple"); // Devuelve true
boolean isAdded2 = fruits.add("Banana"); // Devuelve true
boolean isAdded3 = fruits.add("Apple"); // Devuelve false, porque Apple ya existe
System.out.println(fruits); // Salida: [Apple, Banana]
System.out.println("Primera adición de Apple: " + isAdded1);
System.out.println("Primera adición de Banana: " + isAdded2);
System.out.println("Segunda adición de Apple: " + isAdded3);
}
}
Principio subyacente del método add()
Comprenderadd()el principio de funcionamiento del método nos ayuda a usarlo mejorHashSet。
Proceso de agregar elementos
- Calcular el valor hash: Primero, calcule el valor hash del elemento a agregar
hashCode() - Determinar la posición de almacenamiento: Determinar la posición de almacenamiento del elemento en la tabla hash según el valor hash
- Comprobar si ya existe:
- Si la posición está vacía, almacenar el elemento directamente
- Si la posición no está vacía, se llama al
equals()método para comparar si los elementos son iguales
- Decidir si agregar:
- Si los elementos son iguales, no se agrega y devuelve
false - Si los elementos son diferentes (colisión de hash), es posible que se almacenen en diferentes posiciones del mismo cubo (bucket)
- Si los elementos son iguales, no se agrega y devuelve
Notas importantes
HashSetDepende de loshashCode()yequals()métodos del elemento- Si se van a almacenar objetos personalizados, es necesario sobrescribir correctamente estos dos métodos.
- Una implementación incorrecta puede provocar un comportamiento anormal del conjunto.
Complejidad temporal del método add()
HashSetdeadd()La complejidad temporal del método en condiciones ideales (sin colisiones de hash) es **O(1)**. Esto significa que sin importar cuántos elementos haya en el conjunto, el tiempo para agregar un nuevo elemento es aproximadamente el mismo.
Sin embargo, en casos extremos (todos los elementos se asignan mediante hash a la misma posición), la complejidad temporal se degrada a **O(n)**, porque es necesario recorrer la lista enlazada o el árbol rojo-negro para comprobar si el elemento ya existe.
Aplicaciones prácticas del método add()
Ejemplo 1: Deduplicación
Ejemplo
public class DeduplicationExample {
public static void main(String[] args) {
String[] names = {"Alice", "Bob", "Alice", "Charlie", "Bob"};
HashSet<String> uniqueNames = new HashSet<>();
for (String name : names) {
uniqueNames.add(name);
}
System.out.println(uniqueNames); // Salida: [Alice, Bob, Charlie]
}
}
Ejemplo 2: Contar elementos únicos
Ejemplo
public class UniqueCounter {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 2, 4, 1, 5};
HashSet<Integer> uniqueNumbers = new HashSet<>();
for (int num : numbers) {
uniqueNumbers.add(num);
}
System.out.println("Número de elementos únicos: " + uniqueNumbers.size()); // Salida: 5
}
}
Preguntas frecuentes
1. ¿Por qué el método add() devuelve false al agregar un elemento duplicado?
PorqueHashSetel principio de diseño es no permitir elementos duplicados. Cuando se intenta agregar un elemento que ya existe, el conjunto no cambia y el método devuelvefalsepara indicar que la operación de adición no ocurrió realmente.
2. ¿Cómo determinar si dos elementos son "iguales"?
HashSetUse las siguientes reglas para determinar si dos elementos son iguales:
- Primero compare
hashCode()el valor de retorno - Si los valores hash son iguales, entonces llame al
equals()método para comparar
Solo cuando los dos elementos sonhashCode()igualesademás equals()y devuelventruetrue, se consideran el mismo elemento.
3. ¿Se puede agregar un valor null?
Sí,HashSetse permite agregarnullel valor null, pero solo se puede agregar una vez (porque el conjunto no permite duplicados).
Ejemplo
set.add(null); // Devuelve true
set.add(null); // Devuelve false
Resumen
HashSetdeadd()El método se utiliza para agregar elementos al conjunto.- Si el elemento ya existe, no se agrega y devuelve
false - La complejidad temporal de este método es O(1) en condiciones ideales.
- El uso correcto
HashSetrequiere comprenderhashCode()yequals()la función del método HashSetEs muy adecuado para escenarios que requieren búsqueda rápida y deduplicación.
Al dominaradd()el uso y el principio del método, puedes utilizar de manera más efectivaHashSetpara resolver diversos problemas de programación.
Java HashSet