Java里List取并集方法retainAll不能用来判断是否有重复数据!

网上找的源码java

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;
}
我用这个方法是作Excel导入功能的时候判断数据库里是否已存在制定编号。随便测试一下可用,可实际上没那么简单,最大一个坑就是若是你导入的数据是如出一辙的,这个方法没法去判断是否有重复数据.
从源码也能看出来!若是list1 有a,b,c三个值,而list2有b,c,d三个值.那么list1.retainAll(list2);以后会返回true,list1集合值为b,c。
若是list1的值和list2的值都同样是a,b,c那么会返回false,list1值不变。
若是list1的值为a,b,c,a,b,c,a,b,c那么仍是会返回false,list1值不变。
若是你拿了一个Excel导入屡次是不能判断是否有重复数据的!
若是list1的值为a,b,c,list2的值为d,e,f那么list1.retainAll()后list1就会被清空,list1.size()为0;
若是想判断是否有重复数据,则要先用containsAll判断一下再用retainAll方法:
if(dbCode.containsAll(excelCode)){
return false;
}else{
 boolean flag=dbCode.retainAll(excelCode);
    if(dbCode.size()==0){ 
    //若是dbCode.size()==0证实dbCode本来集合里的值和excelCode的值没一个对应的.
        return true;
    }
     return flag;}
相关文章
相关标签/搜索