Перше, що вам потрібно знати, це те, що HashSet
діє як a Set
, а це означає, що ви додаєте свій об'єкт безпосередньо до HashSet
і він не може містити дублікатів. Ви просто додаєте свою вартість безпосередньо в HashSet
.
Однак, HashMap
це Map
тип. Це означає, що кожного разу, коли ви додаєте запис, ви додаєте пару ключ-значення.
У HashMap
вас можуть бути повторювані значення, але не дублюючі ключі. У HashMap
новому записі замінить старий. Останній запис буде в HashMap
.
Розуміння зв'язку між HashMap і HashSet:
Пам'ятайте, HashMap
не можна мати дублюючі ключі. За сценою HashSet
використовується а HashMap
.
При спробі додати будь-який об'єкт до а HashSet
, ця запис насправді зберігається як ключ у HashMap
- тому самому, HashMap
що використовується поза сценою HashSet
. Оскільки для цього лежить HashMap
потреба пари ключ-значення, для нас формується фіктивне значення.
Тепер, коли ви спробуєте вставити ще один дублікат об'єкта в той самий HashSet
, він знову буде намагатися вставити його як ключ у HashMap
лежачому під ним. Однак HashMap
не підтримує дублікати. Отже, HashSet
все одно буде мати лише одне значення цього типу. Як бічна примітка, для кожного повторюваного ключа, оскільки значення, створене для нашого запису в HashSet, є деяким випадковим / фіктивним значенням, ключ взагалі не замінюється. це буде ігноруватися, оскільки видалення ключа та додавання назад того самого ключа (фіктивне значення те саме) взагалі не мали б сенсу.
Підсумок:
HashMap
дозволяє дублювати values
, але ні keys
.
HashSet
не може містити дублікатів.
Щоб грати з тим, успішно завершено додавання об'єкта чи ні, ви можете перевірити boolean
значення, яке повертається під час дзвінка, .add()
і побачити, повертається він true
чи false
. Якщо він повернувся true
, його вставили.
HashMap
щоб побачити, чиkey
існує вже перед тим, як викликатиput
резервну копіюmap
?