为什么需要在removeAll(Collection c)中的集合中判断元素是否存在?

时间:2015-10-27 04:04:16

标签: java collections removeall

你可以帮我理解这个片段吗?我不明白为什么这个函数必须检查集合包含元素才能删除它。由于迭代器来自集合,迭代器返回的所有元素肯定都在集合中。所以我认为这是浪费时间。非常感谢你

   public boolean removeAll(Collection<?> c) {
    Objects.requireNonNull(c);
    boolean modified = false;
    Iterator<?> it = iterator();
    while (it.hasNext()) {
        if (c.contains(it.next())) {//I don't understand
            it.remove();
            modified = true;
        }
    }
    return modified;
}

2 个答案:

答案 0 :(得分:3)

这看起来像是Set removeAll的实现。

iterator没有迭代传递给方法的Collection。它正在迭代调用该方法的Set

set1.removeAll(collection2);

您正在迭代set1的元素并检查每个元素是否属于collection2,然后将其从Set中删除。

答案 1 :(得分:0)

该代码段来自实现Collection的类。当iterator() Collection还包含c项时,该方法仅从本地类实例中移除项目(通过本地equals)。