Первое, что вам нужно знать, это то , что вы 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?