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 по референция
Използва се по-рядко, например:
- При сериализация/десериализация, когато идентичността на обектите е важна в рамките на един граф от обекти.
- В някои специфични алгоритми, където е необходимо да се различават обекти по тяхната идентичност, а не по тяхната логическа еквивалентност.
- За откриване на циклични препратки.