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 референс боюнча

Көбүнчө колдонулбайт, мисалы:

  • сериализация/десериализация учурунда, объекттердин идентичдүүлүгү бир графда маанилүү болсо.
  • айрым атайын алгоритмдерде, объекттерди алардын идентичдүүлүгү боюнча айырмалоо керек болсо.
  • циклик шилтемелерди аныктоо үчүн.