Junior — Middle
Μπορείτε να εξηγήσετε τη εσωτερική δομή και λειτουργία του HashMap στη γλώσσα Java;
sobes.tech AI
Απάντηση από AI
HashMap στην Java είναι μια δομή δεδομένων για την αποθήκευση ζευγών κλειδιού-τιμής με γρήγορη πρόσβαση μέσω του κλειδιού.
Εσωτερική δομή:
- Το HashMap χρησιμοποιεί έναν πίνακα κάδων (bucket array).
- Για το κλειδί, υπολογίζεται ένας κωδικός κατακερματισμού (hashCode), ο οποίος στη συνέχεια μετατρέπεται σε δείκτη πίνακα.
- Σε κάθε κάδο, αποθηκεύονται στοιχεία με τον ίδιο δείκτη, συνήθως με τη μορφή συνδεδεμένης λίστας ή δέντρου (με Java 8, αν υπάρχουν πολλές συγκρούσεις).
Λειτουργία:
- Κατά την εισαγωγή ενός αντικειμένου, υπολογίζεται ο δείκτης με βάση το hash του κλειδιού.
- Αν ο κάδος είναι άδειος, το στοιχείο τοποθετείται εκεί.
- Αν ο κάδος είναι κατειλημμένος, ελέγχεται η ισότητα των κλειδιών (equals) για να ενημερωθεί η τιμή ή να προστεθεί ένα νέο στοιχείο.
- Κατά την αναζήτηση με κλειδί, επίσης υπολογίζεται ο δείκτης και διατρέχονται τα στοιχεία στον κάδο για να βρεθεί η αντιστοιχία.
Παράδειγμα:
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 5);
int value = map.get("apple"); // 5
Έτσι, το HashMap διασφαλίζει χρόνο πρόσβασης κατά μέσο όρο O(1), αλλά με πολλές συγκρούσεις μπορεί να υποβαθμιστεί σε O(n).