Javaでリストを並べてセットする方法retainAllは重複データがあるかどうかを判断するために使用できません!

1772 ワード

ネットで探したソース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; }
私はこの方法でExcelのインポート機能をするときにデータベースに制定番号があるかどうかを判断します.勝手にテストしてもいいですが、実際にはそんなに簡単ではありません.最大の穴は、あなたが導入したデータがそっくりであれば、この方法では重複データがあるかどうかを判断できません.
ソースコードからも見えます!list 1にa,b,cの3つの値がある、list 2にb,c,dの3つの値がある.ではlist 1.retainAll(list2);その後trueが返され、list 1セットの値はb,cです.
list 1の値とlist 2の値が同じa,bの場合、cはfalseを返し、list 1の値は変わらない.
list 1の値がa,b,c,a,b,c,a,b,cであればfalseが返され、list 1の値は変わらない.
エクセルを複数回導入しても重複データがあるかどうかは判断できません!
list 1の値がa,b,c,list 2の値がd,e,fである場合、list 1.retainAll()後list 1はクリアされ、list 1.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;

}

転載先:https://www.cnblogs.com/345214483-qq/p/5029802.html