Sobes.tech
Junior — Middle

Τι συμβαίνει αν εισάγετε σε ένα HashMap δύο κλειδιά με τον ίδιο κωδικό κατακερματισμού αλλά διαφορετικές τιμές σύμφωνα με το equals;

sobes.tech AI

Απάντηση από AI

Στο HashMap της Java, τα κλειδιά αποθηκεύονται σε buckets που δείχνουν με βάση τον κωδικό hash. Αν δύο κλειδιά έχουν τον ίδιο κωδικό hash, πέφτουν στον ίδιο bucket, αλλά για να καθοριστεί η μοναδικότητα, χρησιμοποιείται η μέθοδος equals.

Αν εισάγετε δύο κλειδιά με τον ίδιο κωδικό hash, αλλά που δεν είναι ίσα σύμφωνα με το equals, το HashMap θα διατηρήσει και τα δύο κλειδιά ως διαφορετικές εγγραφές στον ίδιο bucket.

Παράδειγμα:

Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, αλλά !key1.equals(key2)

map.put(key1, "value1");
map.put(key2, "value2");

System.out.println(map.size()); // 2

Επομένως, ο ίδιος κωδικός hash δεν σημαίνει ία ία κλειδιά. Το HashMap πρώτα ψάχνει στον bucket με βάση το hash, και στη συνέχεια συγκρίνει τα κλειδιά μέσω equals. Αν το equals επιστρέφει false, το κλειδί θεωρείται νέο και προστίθεται στη συλλογή.