Middle
Werkt de HashMap als alle toegevoegde sleutels dezelfde hashCode() hebben?
sobes.tech AI
Antwoord van AI
Ja, dat zal.
Met een hashCode() die hetzelfde is, zullen alle elementen in dezelfde "bak" (bucket) in HashMap terechtkomen. Dit zal ertoe leiden dat HashMap degradeert tot een gekoppelde lijst (of een boom, als er genoeg elementen zijn en Java 8+ met TreeNode wordt gebruikt), wat de prestaties van put(), get(), remove() aanzienlijk zal verslechteren tot O(n) in plaats van O(1) gemiddeld.
Dus, HashMap zal correct functioneren, maar zal zijn belangrijkste snelheidvoordeel verliezen door hash-collisies. Om objecten met dezelfde hash te onderscheiden, wordt de methode equals() gebruikt.
class BadHashKey {
private String name;
public BadHashKey(String name) {
this.name = name;
}
@Override
public int hashCode() {
return 1; // Altijd dezelfde hash-code
}
@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); // Controleer op gelijkheid op naam
}
@Override
public String toString() {
return "BadHashKey{" +
"name='" + name + '\'' +
'}';
}
}
// Voorbeeld van gebruik
// Map<BadHashKey, String> map = new HashMap<>();
// map.put(new BadHashKey("key1"), "value1");
// map.put(new BadHashKey("key2"), "value2"); // Beide sleutels in dezelfde bak
// String value = map.get(new BadHashKey("key1")); // Zoekopdracht zal langzaam zijn