首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向HashSet/HashMap添加重复的值是否会替换以前的值

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

Stack Overflow用户
提问于 2012-10-18 02:14:15
回答 5查看 224.8K关注 0票数 148

请考虑下面这段代码:

代码语言:javascript
复制
HashSet hs = new HashSet();
hs.add("hi"); -- (1)
hs.add("hi"); -- (2)

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

我想知道如果我们添加了重复的元素,那么它是替换前一个元素还是干脆不添加它?

另外,在同样的情况下使用HashMap会发生什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-18 02:14:56

HashMap的情况下,它用新值替换旧值。

如果是HashSet,则不会插入该项。

票数 263
EN

Stack Overflow用户

发布于 2012-10-18 02:18:00

在HashSet的情况下,它不会取代它。

从文档中:

http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html#add(E

“如果指定的元素不存在,则将其添加到此集合中。更正式地说,如果此集合中不包含符合(e==null ? e2==null : e.equals( e2 ))的元素e2,则将指定的元素e添加到此集合中。如果此集合中已包含该元素,则调用将保持该集合不变并返回false。”

票数 4
EN

Stack Overflow用户

发布于 2012-10-18 02:19:25

如果我错了,请纠正我,但你得到的是,对于字符串,"Hi“== "Hi”并不总是正确的(因为它们不一定是同一个对象)。

得到答案1的原因是JVM将在可能的情况下重用字符串对象。在本例中,JVM重用了string对象,从而覆盖了Hashmap/Hashset中的项。

但您不能保证此行为(因为它可能是具有相同值“Hi”的不同string对象)。您看到的行为正是由于JVM的优化造成的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12940663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档