Τι θα επιστρέψει η μέθοδος HasMap.get() αν οι μέθοδοι equals και hashCode δεν έχουν υπερισχύσει;
sobes.tech AI
Απάντηση από AI
Το null θα επιστραφεί αν το κλειδί που χρησιμοποιείται για την αναζήτηση δεν είναι ακριβώς το ίδιο αντικείμενο (έχει την ίδια αναφορά) με αυτό που χρησιμοποιήθηκε κατά την εισαγωγή.
Ο λόγος είναι ότι το HashMap χρησιμοποιεί έναν συνδυασμό hashCode() και equals() για να καθορίσει την "ισότητα" των κλειδιών. Αν αυτές οι μέθοδοι δεν υπερισχύουν, χρησιμοποιούνται οι υλοποιήσεις από το Object.
- Το
Object.hashCode()επιστρέφει συνήθως μια τιμή βασισμένη στη διεύθυνση μνήμης του αντικειμένου, δηλαδή μοναδική για κάθε στιγμιότυπο. - Το
Object.equals()απλώς ελέγχει την ισότητα αναφοράς (this == obj).
Έτσι, για να βρει το HashMap.get() ένα στοιχείο χρησιμοποιώντας τις προεπιλεγμένες equals και hashCode(), πρέπει και οι δύο συνθήκες να ισχύουν:
- Οι κωδικοί κατακερματισμού (
Object.hashCode()) πρέπει να είναι ίσοι, κάτι που είναι πολύ απίθανο για διαφορετικά αντικείμενα. - Τα αντικείμενα πρέπει να είναι αναφορά-ίσα, (
Object.equals()), δηλαδή, να είναι η ίδια περίπτωση.
Αν τοποθετήσετε ένα αντικείμενο σε ένα HashMap και στη συνέχεια προσπαθήσετε να το ανακτήσετε χρησιμοποιώντας άλλο αντικείμενο με τις ίδιες τιμές πεδίων (αλλά όχι την ίδια περίπτωση), τα hashCode και equals κατά την προεπιλογή θα το θεωρούν διαφορετικό, και το get() θα επιστρέψει null.