展开全部
首先, 这个retainAll 方法的作用是 :java.util.ArrayList.retainAll(Collection> collection)
仅保留此collection中那些也包含在指定collection的元素(可选操作)。
换句话说,移除此collection中未包含在指定collection中的所有元素。
此实现在此collection上进行迭代,依次检查该迭代器返回的每个元素,以查看其是否包含在指定的collection中。如果不是,则使用迭代器的remove方法将其从此collection中移除。
其次,返回值的意思是这样的,如果此 collection 由于调用而发生更改,则返回 true
再次,你这个list3 和list1 里面元素的内容 其实是一样的, 这样一来,调用 list3.retainAll(list1) 时候,发现,不需要从list3中去除不在list1中的元素,因此这个list3不需要发生更改,那么返回值就是是false,也就是说,这62616964757a686964616fe58685e5aeb931333335333735个方法的返回值是标识list3 有没有改变,而不是这个方法是否执行正常或者成功
最后,我们再来看看 JDK1.6 这个方法的 源码
public boolean retainAll(Collection> c){
boolean modified = false;
Iterator e = iterator();
while (e.hasNext()){
if (!c.contains(e.next())){
e.remove();
modified = true;
}
}
return modified;
}