List數據對比篩選,如何才能達到最佳效率?

在實際的開發中,經常會暈倒這樣的問題,有兩個List的數據,需要對這兩個List的數據進行對比,然後篩選出需要的對象。

例如:財務中的對賬,數據源一個是銀行日記賬(aList),一個是銀行對帳單(bList),業務操作就是把兩個List裏面金額相同的記錄篩選掉,剩下金額不相等的。

在實際開發中我目前知道有兩個方式(假設兩個List各有1000條數據):

1、最簡單的就是用雙重循環進行比較,雖然簡單,但是如果兩個List的數據量都很大,那麼運行時間將成數量級增長。循環次數爲1000*1000

2、把一個List通過循環放入Map中,把需要比較的字段作爲Map的Key,然後循環另外一個List,到Map裏面去匹配。

[code]
for(A a : aList){
map.put(a.amount,a);
}

for(B b : bList){
A a = map.get(b.amount);
if(a==null){
//a==null則說明沒有同b匹配的項
}else{
//a!=null則說明匹配上了
}
}
[/code]

由於在Map中取數非常快,主要的耗時就在業務處理和循環上。循環次數爲1000*2

但是第2種方法還是有不足的地方:

1、當比較的值有相同的時候,由於Key必須唯一,所以後面的值會覆蓋掉前面的數據
2、當比較的內容比較複雜,或者是多項的時候,就比較難處理


我想在平時開發中大家應該都會遇到這樣的問題吧,不知道大家有沒有更好的方法來解決這個問題!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章