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 αναφορικά
Χρησιμοποιείται λιγότερο συχνά, για παράδειγμα:
- Κατά την σειριοποίηση/αποσειριοποίηση, όταν η ταυτότητα των αντικειμένων είναι σημαντική σε ένα ενιαίο γράφο αντικειμένων.
- Σε ορισμένους ειδικούς αλγόριθμους όπου απαιτείται να διακρίνονται τα αντικείμενα με βάση την ταυτότητά τους και όχι με βάση την λογική ισότητα.
- Για την ανίχνευση κυκλικών αναφορών.