0

来自Java 文档

布尔加法(E e)

确保此集合包含指定的元素(可选操作)。如果此集合因调用而更改,则返回true 。(如果此集合不允许重复且已包含指定元素,则返回false 。)

它只说“如果此集合不允许重复,则返回 false”。它没有解释是否应该忽略该元素或替换它。根据这句话“如果此集合因调用而更改,则返回 true”,我认为每当此方法返回 false 时,这意味着该集合忽略了元素并且没有替换任何元素,集合保持原样. 那是对的吗?

在重复元素的情况下,java.util.Collection 实现不允许重复的类执行的操作是什么?它是总是忽略,还是总是替换,还是取决于实现?

4

4 回答 4

4

因为它在集合被修改时返回true,所以返回false意味着它没有修改集合,即它没有替换元素。

于 2013-10-25T05:49:19.900 回答
0

文档可能未涵盖的问题是“集合能否快速检测到重复项并无论如何存储它们?”。答案是肯定的,一个例子可以是 Guava 中的Multiset,其中计算所有重复项并Collection.add(obj)始终返回true

于 2013-10-25T06:16:58.327 回答
0

具体的实现解释清楚,例如 HashSet.add 说“如果这个集合已经包含元素,则调用保持集合不变并返回 false”

于 2013-10-25T06:27:09.253 回答
0

那是对的。

如果您尝试添加重复项,则不允许重复的集合将返回 false。什么都不会被修改,它只会被忽略。

如果你正在为一个集合编写一个实现,那么理论是这样的:

检查该集合是否已包含它。如果是,则返回 false。否则,将元素添加到集合中,返回 true。

于 2013-10-25T06:11:33.750 回答