java用retainALL 处理两个具有相同元素的list,竟然返回false,这是为什么?
设了两个list里面元素完全一样,但是用retainAll却获取不了元素,这是为什么的list代码如下String[]food={"eggs","bacon","lett...
设了两个list 里面元素完全一样,但是用retainAll却获取不了元素,这是为什么的
list代码如下
String[] food={"eggs","bacon","lettuce","beef","pork","chicken"};
ArrayList<String> list1=new ArrayList<String>();
ArrayList<String> list3=new ArrayList<String>();
for(String x: food){
list1.add(x);
list3.add(x);
}
然后用retainAll处理list3时一直没有返回值,测了下,竟然list3.retainAll(list1)是false 这是为什么呢?
System.out.println("retainall "+list3.retainAll(list1)); //输出retainall false
貌似没说明白,按理说这里应该返回true的,为什么成了false呢? 展开
list代码如下
String[] food={"eggs","bacon","lettuce","beef","pork","chicken"};
ArrayList<String> list1=new ArrayList<String>();
ArrayList<String> list3=new ArrayList<String>();
for(String x: food){
list1.add(x);
list3.add(x);
}
然后用retainAll处理list3时一直没有返回值,测了下,竟然list3.retainAll(list1)是false 这是为什么呢?
System.out.println("retainall "+list3.retainAll(list1)); //输出retainall false
貌似没说明白,按理说这里应该返回true的,为什么成了false呢? 展开
展开全部
首先, 这个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,也就是说,这个方法的返回值是标识list3 有没有改变,而不是这个方法是否执行正常或者成功
最后,我们再来看看 JDK1.6 这个方法的 源码
public boolean retainAll(Collection<?> c){
boolean modified = false;
Iterator<E> e = iterator();
while (e.hasNext()){
if (!c.contains(e.next())){
e.remove();
modified = true;
}
}
return modified;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询