Перше, що вам потрібно знати, це те, що 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?