Middle
Va funcționa HashMap dacă toate cheile adăugate au același hashCode()?
sobes.tech AI
Răspuns de la AI
Da, va fi.
Cu un hashCode() identic, toate elementele vor ajunge în aceeași "coș" (bucket) în HashMap. Acest lucru va duce la degradarea HashMap-ului într-o listă legată (sau un copac, dacă există suficiente elemente și se folosește Java 8+ cu TreeNode), ceea ce va deteriora semnificativ performanța operațiilor put(), get(), remove() până la O(n) în loc de O(1) în medie.
Prin urmare, HashMap va funcționa corect, dar își va pierde principalul avantaj în viteză din cauza coliziunilor de hash. Pentru diferențierea obiectelor cu același hash, se folosește metoda equals().
class BadHashKey {
private String name;
public BadHashKey(String name) {
this.name = name;
}
@Override
public int hashCode() {
return 1; // Returnează întotdeauna același cod 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); // Verifică egalitatea după nume
}
@Override
public String toString() {
return "BadHashKey{" +
"name='" + name + '\'' +
'}';
}
}
// Exemplu de utilizare
// Map<BadHashKey, String> map = new HashMap<>();
// map.put(new BadHashKey("key1"), "value1");
// map.put(new BadHashKey("key2"), "value2"); // Ambele chei vor fi în același coș
// String value = map.get(new BadHashKey("key1")); // Căutarea va fi lentă