向 HashSet/HashMap 添加重复值是否会替换以前的值

2022-08-31 07:34:38

请考虑以下代码:

HashSet hs = new HashSet();
hs.add("hi"); -- (1)
hs.add("hi"); -- (2)

hs.size()将给出 1,因为不允许重复,因此只存储一个元素。HashSet

我想知道如果我们添加重复的元素,那么它是替换上一个元素还是根本不添加它?

另外,对于相同的情况,会发生什么?HashMap


答案 1

对于HashMap,它将旧值替换为新值。

对于 HashSet,则不会插入该项。


答案 2

您需要知道的第一件事是,它的作用类似于 ,这意味着您将对象直接添加到 中,并且它不能包含重复项。您只需直接在 中添加您的价值。HashSetSetHashSetHashSet

但是,是一种类型。这意味着每次添加条目时,都会添加一个键值对。HashMapMap

中,可以有重复的值,但不能有重复的键。在新条目中将替换旧条目。最新的条目将在 .HashMapHashMapHashMap

了解 HashMap 和 HashSet 之间的链接:

请记住,不能有重复的密钥。幕后使用 .HashMapHashSetHashMap

当您尝试将任何对象添加到 中时,此条目实际上作为键存储在 - 与 幕后使用的相同。由于此基础需要键值对,因此会为我们生成一个虚拟值。HashSetHashMapHashMapHashSetHashMap

现在,当您尝试将另一个重复对象插入到同一个对象中时,它将再次尝试将其作为键插入到下面的位置。但是,不支持重复项。因此,仍将导致只有一个该类型的值。作为旁注,对于每个重复的键,由于我们在HashSet中的条目生成的值是一些随机/虚拟值,因此根本不会替换该键。它将被忽略,因为删除密钥并添加回相同的密钥(虚拟值相同)将没有任何意义。HashSetHashMapHashMapHashSet

总结:

HashMap允许重复,但不允许。 不能包含重复项。valueskeysHashSet

要了解对象的添加是否成功完成,可以检查调用时返回的值,看看它是否返回或 .如果它返回,则插入。boolean.add()truefalsetrue


推荐