为什么java.util.Collection.remove()方法返回一个布尔值?

3

有没有现实世界的例子可以说明调用者何时可能使用从 Collection.remove() 返回的值?

我很高兴这个方法返回一个布尔值,但我很难想象什么情况下调用者会发现它的结果对他有用。


最简单的用法是执行检查,if(Collection.remove(Obj)){ do some operation; } 其他函数同理。 - JNL
这样做比检查contains然后调用remove节省时间吗? - chrylis -cautiouslyoptimistic-
2个回答

6
< p >Collection.remove() 方法在集合中未找到传入的对象时会返回 false

如果您预期该对象存在,则此方法非常有用 - 一旦被删除,就不可能再确认它曾经存在。 调用 remove() 是最后发现对象不存在的机会。


或者,如果某个对象包含在“Collection”中,则您可能需要注销该对象,但是如果有人尝试首先没有在那里的情况下删除对象,则不会出现问题。 - chrylis -cautiouslyoptimistic-
@chrylis 对的。无论需要知道的原因是什么,你只能在调用 remove() 时找出来。 - Bohemian

4

正如javadoc所述

如果存在指定的元素,则从此集合中删除一个单个实例(可选操作)。

该集合可能包含多个相等的对象,因为集合不一定是Set。

因此,一种使用情况可能是删除所有与要删除参数相等的对象实例。

while(col.remove(anObject));

记住,javadoc也说:
更正式地说,删除一个元素e,使得(o==null ? e==null : o.equals(e))。
因此,如果您获取了可能包含空值的集合,并且只想处理“真实”对象,则可以使此代码更轻松。
for(Object obj : col) {
    if(obj != null){
        doSomethingWithObject(obj);
    }
}

通过首先删除null值:
while(col.remove(null));

for(Object obj : col) {
    doSomethingWithObject(obj); 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接