Sobes.tech
Middle+

Ποια είναι η διαφορά μεταξύ HashMap και IdentityHashMap;

sobes.tech AI

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

Η βασική διαφορά βρίσκεται στον τρόπο που συγκρίνουν τα κλειδιά.

  • HashMap χρησιμοποιεί τη μέθοδο equals() και τον κωδικό κατακερματισμού του κλειδιού για τον καθορισμό της ισότητας, που αντιστοιχεί στην τυπική σημασιολογία ισότητας αντικειμένων.
  • IdentityHashMap συγκρίνει αυστηρά τα κλειδιά με βάση τη αναφορά (χρησιμοποιώντας ==), αγνοώντας τη μέθοδο equals(). Αυτό σημαίνει ότι δύο διαφορετικά αντικείμενα, ακόμα και αν είναι "ίδια" σύμφωνα με τη μέθοδο equals(), θα θεωρούνται διαφορετικά κλειδιά στο IdentityHashMap αν έχουν διαφορετικές διευθύνσεις μνήμης.

Παράδειγμα:

// HashMap
Object key1 = new String(" κλειδί");
Object key2 = new String(" κλειδί");
Map<Object, String> hashMap = new HashMap<>();
hashMap.put(key1, "τιμή 1");
hashMap.put(key2, "τιμή 2"); // θα αντικαταστήσει την τιμή για το " κλειδί"

// IdentityHashMap
Map<Object, String> identityHashMap = new IdentityHashMap<>();
identityHashMap.put(key1, "τιμή 1");
identityHashMap.put(key2, "τιμή 2"); // θα προσθέσει μια δεύτερη εγγραφή, καθώς το key1 != key2 αναφορικά

Χρησιμοποιείται λιγότερο συχνά, για παράδειγμα:

  • Κατά την σειριοποίηση/αποσειριοποίηση, όταν η ταυτότητα των αντικειμένων είναι σημαντική σε ένα ενιαίο γράφο αντικειμένων.
  • Σε ορισμένους ειδικούς αλγόριθμους όπου απαιτείται να διακρίνονται τα αντικείμενα με βάση την ταυτότητά τους και όχι με βάση την λογική ισότητα.
  • Για την ανίχνευση κυκλικών αναφορών.