方法一:
// 方法1,兩層遍歷查詢,遍歷次數為list1.size()*list2.size(),有點蠢
private static listgetdiffrent1(listlist1, listlist2)
}// 計時
system.out.println("方法1 耗時:" + (system.currenttimemillis() - start) + " 毫秒");
return diff;
}
方法二:
// 方法2,兩層遍歷查詢,用retainall()方法查詢,也很蠢,方法底層依舊是兩層遍歷
private static listgetdiffrent2(listlist1, listlist2)
方法三:
// 方法3,用map存放list1和list2的元素作為key,value為其在list1和list2中出現的次數
// 出現次數為1的即為不同元素,查詢次數為list1.size() + list2.size(),較方法1和2,是極大簡化
private static listgetdiffrent3(listlist1, listlist2)
// 遍歷list2,在map中查詢list2的元素,找到則計數+1;未找到則放入map,計數1
for (string string : list2)
map.put(string, 1);
}for (map.entryentry : map.entryset())
}system.out.println("方法3 耗時:" + (system.currenttimemillis() - start) + " 毫秒");
return diff;
}
方法四:
// 方法四是優化方法三,減少put次數
private static listgetdiffrent4(listlist1, listlist2)
for (string string : maxlist)
for (string string : minlist)
map.put(string, 1);
}for (map.entryentry : map.entryset())
}system.out.println("方法4 耗時:" + (system.currenttimemillis() - start) + " 毫秒");
return diff;
}
以上幾種方法都好用,雖然方法四很快,但對於我的需求貌似不是很好用。
我要比較倆個list集合取差集,但是使用方法四取出來的結果會比正確的結果多幾個,但方法一和方法二得到的結果是正確無誤的,雖然方法笨了一些,對於資料量小的還是可以使用的。
如果哪位大神知道方法一二取的結果和方法三四取得結果為什麼不同,請指教。
參考文章:
java中List集合的比較
list集合 list是乙個介面,它的父類介面時collection list的實現類 arraylist 陣列實現 linkedlist 鍊錶實現 vector 也是陣列實現 arraylist 和 linkedlist 1 實現不同,乙個是陣列實現,乙個是鍊錶實現 2 效率不同,arraylis...
list集合比較批量更新
比較更新組織列舉 author hanjidong date 2020年11月8日 下午12 46 23 since 0.0.1 param originlist param orgextends void private void updatelist listoriginlist,listorg...
08List集合,Set集合,比較器
繼承自collection介面,是單列集合的乙個重要分支。實現list介面的物件稱為list集合。關於linkedlist linkedlist是list介面下另乙個實現類。linkedlist內部是在使用鍊錶 雙向鍊錶 儲存資料。linkedlist的特點是查詢慢,增刪快 linkedlist有一...