来自 Java Doc,
布尔加法(E e)
确保此集合包含指定的元素(可选) 操作)。如果此集合因此而更改,则返回 true 呼叫。 (如果此集合不允许重复,则返回 false 已包含指定的元素。)
它只说“如果此集合不允许重复,则返回false”。它没有解释是否忽略元素或替换它。根据这个短语“如果这个集合由于调用”而改变,则返回true,我假设这个方法返回false时,意味着Collection忽略了元素而没有元素是更换后,该系列保持原样。这是对的吗?
如果是重复元素,java.util.Collection实现不允许重复的类的操作是什么?它总是被忽略,或者总是被替换,还是取决于实现?
答案 0 :(得分:4)
因为它在修改集合时返回true,返回false意味着它没有修改集合,即它没有替换元素。
答案 1 :(得分:0)
这是正确的。
如果您尝试添加重复项,则不允许重复的集合将返回false。什么都没有被修改,它只会被忽略。
如果您正在编写一个集合的实现,理论将是这样的:
检查该集合是否已包含它。 如果是,则返回false。 否则,添加要设置的元素,返回true。
答案 2 :(得分:0)
文档可能没有涉及的问题是“收藏是否可以快速检测重复并存储它们?”。答案是肯定的,一个例子可以是番石榴中的Multiset,其中所有重复项都被计算在内,Collection.add(obj)
总是返回true
。
答案 3 :(得分:0)
具体实现清楚地解释了它,例如HashSet.add说“如果这个集合已经包含了元素,那么调用会保持集合不变并返回false”