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 референс боюнча
Көбүнчө колдонулбайт, мисалы:
- сериализация/десериализация учурунда, объекттердин идентичдүүлүгү бир графда маанилүү болсо.
- айрым атайын алгоритмдерде, объекттерди алардын идентичдүүлүгү боюнча айырмалоо керек болсо.
- циклик шилтемелерди аныктоо үчүн.