java源码中的List的删除list中集合中所有元素的方法
public boolean removeAll(Collection<?> c) {
Objects.requireNonNull(c);
return batchRemove(c, false);
}
private boolean batchRemove(Collection<?> c, boolean complement) {
final Object[] elementData = this.elementData;
int r = 0, w = 0;
boolean modified = false;
try {
for (; r < size; r++)
if (c.contains(elementData[r]) == complement)
elementData[w++] = elementData[r]; // 不太明白这句话什么意思?
}
把不需要删除的数据往前移 最后删除后面的数据
意思就是在elementData[]数组中挑选出符合c.contains(elementData[r]) == complement条件的,因为w必定是小于等于r,不管满不满足条件,r总是递增的,w只能在满足条件的情况下递增。