Middle
¿Funcionará HashMap si todas las claves añadidas tienen el mismo hashCode()?
sobes.tech AI
Respuesta de la IA
Sí, lo habrá.
Con un hashCode() idéntico, todos los elementos caerán en la misma "cesta" (bucket) en HashMap. Esto conducirá a que HashMap se degrade a una lista enlazada (o un árbol, si hay suficientes elementos y se usa Java 8+ con TreeNode), lo que deteriorará significativamente el rendimiento de las operaciones put(), get(), remove() hasta O(n) en lugar de O(1) en promedio.
Por lo tanto, HashMap funcionará correctamente, pero perderá su principal ventaja en velocidad debido a las colisiones de hash. Para distinguir objetos con el mismo hash, se usa el método equals().
class BadHashKey {
private String name;
public BadHashKey(String name) {
this.name = name;
}
@Override
public int hashCode() {
return 1; // Siempre devuelve el mismo código hash
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
BadHashKey that = (BadHashKey) o;
return name.equals(that.name); // Compara por igualdad de nombre
}
@Override
public String toString() {
return "BadHashKey{" +
"name='" + name + '\'' +
'}';
}
}
// Ejemplo de uso
// Map<BadHashKey, String> map = new HashMap<>();
// map.put(new BadHashKey("key1"), "value1");
// map.put(new BadHashKey("key2"), "value2"); // Ambos claves estarán en la misma cesta
// String value = map.get(new BadHashKey("key1")); // La búsqueda será lenta