2

我是个傻学生。我有一个问题,就是标题。我认为当我这样做时,是否返回布尔值对我没有影响:

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

这是 API 中 Arraylist 类的 remove 方法(从 Collection< E > 接口覆盖):

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<E> 界面中,框架的设计者编写public void remove(Object o);是可以的,但他们必须有一定的目的,我不明白。返回布尔值是为了什么?请告诉我

4

3 回答 3

5

在删除的情况下:

它准确地告诉您是否从您的集合中删除了任何对象。

在添加的情况下:

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

从哈希集:

public boolean add(E e) {
    return (this.map.put(e, PRESENT) == null);
  }
于 2013-06-16T10:42:22.647 回答
1

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

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

于 2013-06-16T11:09:06.007 回答
0

remove(o)如果在集合中没有找到 o,则返回 false。

于 2013-06-16T10:42:10.027 回答