Junior — Middle
Πώς διασφαλίζεται η συνέπεια μεταξύ των μεθόδων hashCode() και equals() στη Java και γιατί είναι σημαντικό;
sobes.tech AI
Απάντηση από AI
Στη Java, οι μέθοδοι hashCode() και equals() πρέπει να είναι συμβατές ώστε τα αντικείμενα να λειτουργούν σωστά στις συλλογές όπως το HashMap ή το HashSet. Κανόνες:
- Αν δύο αντικείμενα είναι ίσα σύμφωνα με το equals(), τότε το hashCode() τους πρέπει να επιστρέφει την ίδια τιμή.
- Αν το hashCode() δύο αντικειμένων διαφέρει, τότε το equals() θα επιστρέψει οπωσδήποτε false.
Αυτό είναι σημαντικό επειδή οι πίνακες κατακερματισμού χρησιμοποιούν πρώτα το hashCode() για γρήγορη αναζήτηση και μετά το equals() για ακριβή σύγκριση. Η μη τήρηση αυτής της συμφωνίας μπορεί να οδηγήσει σε λανθασμένη λειτουργία των συλλογών.
Παράδειγμα:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return id == person.id;
}
@Override
public int hashCode() {
return Objects.hash(id);
}