Ana*_*and 128 java hashmap duplicates hashset
请考虑以下代码:
HashSet hs = new HashSet();
hs.add("hi"); -- (1)
hs.add("hi"); -- (2)
Run Code Online (Sandbox Code Playgroud)
hs.size()将给出1,因为HashSet不允许重复,因此只存储一个元素.
我想知道我们是否添加了重复元素,然后它是否替换了前一个元素,或者它只是不添加它?
此外,HashMap在同一案件中使用会发生什么?
Jim*_*mmy 46
你需要知道的第一件事是HashSet像a一样的行为Set,这意味着你直接将对象添加到它HashSet,它不能包含重复项.您只需直接添加您的值HashSet.
但是,HashMap是一种Map类型.这意味着每次添加条目时,都会添加键值对.
在HashMap你可以有重复的值,但不能重复键.在HashMap新条目中将取代旧条目.最近的参赛作品将在HashMap.
理解HashMap和HashSet之间的链接:
请记住,HashMap不能有重复的密钥.在幕后HashSet使用了一个HashMap.
当您尝试将任何对象添加到a中时HashSet,此条目实际上存储为一个键HashMap- 与HashMap场景后面使用的相同HashSet.由于此底层HashMap需要键值对,因此为我们生成虚拟值.
现在,当您尝试将另一个重复对象插入到同一个对象中时HashSet,它将再次尝试将其作为一个键插入到HashMap位于下方的键中.但是,HashMap不支持重复.因此,HashSet仍将导致只有该类型的一个值.作为旁注,对于每个重复键,由于为HashSet中的条目生成的值是一些随机/虚拟值,因此根本不替换该键.它将被忽略,因为删除密钥并添加相同的密钥(虚拟值相同)根本没有任何意义.
摘要:
HashMap允许重复values,但不允许keys.
HashSet不能包含重复项.
要使用是否成功完成对象的添加,您可以检查boolean调用时返回的值.add() ,看它是否返回true或false.如果它返回true,则插入.
pb2*_*b2q 19
该文档是对这个很清楚:HashSet.add 不更换:
如果指定的元素尚不存在,则将其添加到此集合中.更正式地,如果此集合不包含元素e2(e == null?e2 == null:e.equals(e2)),则将指定元素e添加到此集合.如果此set已包含该元素,则调用将保持set不变并返回false.
但将取代:HashMap.put
如果映射先前包含键的映射,则替换旧值.
| 归档时间: |
|
| 查看次数: |
187849 次 |
| 最近记录: |