Javaでリストを並べてセットする方法retainAllは重複データがあるかどうかを判断するために使用できません!
1772 ワード
ネットで探したソース
私はこの方法で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メソッドを使用します.
転載先:https://www.cnblogs.com/345214483-qq/p/5029802.html
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