Sobes.tech
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).