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