Митът за уникалността на обектите, включени в комплекта и ключовете на картата

1. Набор е комбинация, която не може да съдържа дублирани елементи [1]

2. Карта е обект, който карти ключове за ценности. А карта не може да съдържа дублирани ключове: Всеки ключ може да води към най-много една стойност. [2]

С тези думи започне наръчници за обучение по съответните интерфейси рамкови колекции, включени в стандартния комплект на Java инструменти. Трудно е да не се съглася, когато той пише надежден източник, както и всичко, което се цитира този факт. Но не забравяйте за ръцете криви, лоша проектирането и друго неправомерно поведение, които имат място в съвременния свят на разработка на софтуер.

Изправени пред един интересен въпрос, зададен в [3] интервюта, ми беше любопитно да се провери, но това, което наистина се случва, когато един обект изпълнение на основни функции на картата, за да се промени? И как ще се държи този случай, когато се опитате да се изравни броя на ключовете?

Известно е, че уникалността на картата на ключове се проверява за равенство обекти метод е равно на (obj1.equals (obj2) == вярно), а също и хешове обектите на данни, също трябва да бъде идентичен (obj1.hashCode () == obj2.hashCode ()). Въз основа на това, че не е трудно да си представим това, което трябва да се направи, за да постави в картата няколко три еднакви ключове за различни стойности. Това, което направих:

Както може да се види "много важни данни 2" не е на разположение, когато се опитват да я получите в позната начин.
Оттук и изводът: като клавишите за реализация Карта и Set обекти приложения могат да съдържат същите обекти. Какво всъщност се изисква да се докаже. Едно нещо е ясно, че след инициализиране на горепосочените обекти вече не се правят проверки за уникалност, освен ако, разбира се, те не могат да бъдат редактирани. Но във всеки случай, вече съществуващи обекти остават по местата си.

източници: