为什么返回一些方法的值,例如:add(E),remove(Object),addAll,...在Collection FrameWork中是boolean?

时间:2013-06-16 10:25:13

标签: java collections

我是一个愚蠢的学生。我有一个问题是标题。 我想当我这样做时,返回布尔或不对我没有影响:

List<String> lst = new ArrayList<String>();
lst.add("whatever");
lst.remove("whatever");

以下是API中Arraylist Class的remove方法(来自Collection&lt; E&gt;接口的覆盖):

public boolean remove(Object o) {
    if (o == null) {
        for (int index = 0; index < size; index++)
            if (elementData[index] == null) {
                fastRemove(index);
                return true;
            }
    } else {
        for (int index = 0; index < size; index++)
            if (o.equals(elementData[index])) {
                fastRemove(index);
                return true;
            }
    }
    return false;
}

我认为如果在Collection&lt; E>接口,框架的设计者写public void remove(Object o);是好的,但他们必须有一定的目的,我不明白。返回布尔值是什么?请告诉我

3 个答案:

答案 0 :(得分:5)

在删除的情况下:

它确切地告诉您是否有任何对象已从您的集合中删除,或者不是。

在添加:

的情况下

它在collections Set中很有用,因为如果新元素添加到集合中它返回true,如果对象已经在,则返回false集合。

来自HashSet:

public boolean add(E e) {
    return (this.map.put(e, PRESENT) == null);
  }

答案 1 :(得分:1)

有时,客户端代码可能不知道要删除的对象是否是集合的一部分。此客户端代码肯定想知道删除操作的效果。因此,设计决定返回一个布尔值。

- 编辑 例如, 假设,两个线程之间共享同步集合。一个填充它,另一个从中删除对象。删除线程想知道删除是否成功。

答案 2 :(得分:0)

如果在集合中找不到o,则

remove(o)返回false。