请考虑下面这段代码:
HashSet hs = new HashSet();
hs.add("hi"); -- (1)
hs.add("hi"); -- (2)
因为HashSet
不允许重复,所以hs.size()
会给出1,所以只会存储一个元素。
我想知道如果我们添加了重复的元素,那么它是替换前一个元素还是干脆不添加它?
另外,在同样的情况下使用HashMap
会发生什么?
发布于 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。”
发布于 2012-10-18 02:19:25
如果我错了,请纠正我,但你得到的是,对于字符串,"Hi“== "Hi”并不总是正确的(因为它们不一定是同一个对象)。
得到答案1的原因是JVM将在可能的情况下重用字符串对象。在本例中,JVM重用了string对象,从而覆盖了Hashmap/Hashset中的项。
但您不能保证此行为(因为它可能是具有相同值“Hi”的不同string对象)。您看到的行为正是由于JVM的优化造成的。
https://stackoverflow.com/questions/12940663
复制相似问题