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;}
相關文章
相關標籤/搜索