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

2021-08-29 09:30:40 字數 634 閱讀 4333

在實際的開發中,經常會暈倒這樣的問題,有兩個list的資料,需要對這兩個list的資料進行對比,然後篩選出需要的物件。

例如:財務中的對賬,資料來源乙個是銀行日記賬(alist),乙個是銀行對帳單(blist),業務操作就是把兩個list裡面金額相同的記錄篩選掉,剩下金額不相等的。

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

1、最簡單的就是用雙重迴圈進行比較,雖然簡單,但是如果兩個list的資料量都很大,那麼執行時間將成數量級增長。迴圈次數為1000*1000

2、把乙個list通過迴圈放入map中,把需要比較的字段作為map的key,然後迴圈另外乙個list,到map裡面去匹配。

[code]

for(a a : alist)

for(b b : blist)else

}[/code]

由於在map中取數非常快,主要的耗時就在業務處理和迴圈上。迴圈次數為1000*2

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

1、當比較的值有相同的時候,由於key必須唯一,所以後面的值會覆蓋掉前面的資料

2、當比較的內容比較複雜,或者是多項的時候,就比較難處理

我想在平時開發中大家應該都會遇到這樣的問題吧,不知道大家有沒有更好的方法來解決這個問題!!

篩選List中重複的資料

1.宣告list集合,並放入測試資料 listlist new arraylist list.add 測試 list.add 測試 list.add 測試2 list.add 測試2 list.add 測試2 list.add 測試3 list.add 測試3 list.add 測試2 list.a...

關於List篩選資料的筆記

list有整合了很多方法,如果在乙個list中,需要選擇僅僅需要的字段,或者篩選出滿足條件的物件,可以參考此種用法 namespace testdemo new person new person new person list select僅僅是選中此list的相關屬性 name,age.perl...

達夢資料庫,寫SQL如何才能不帶上模式名?

經常有朋友問到在dm資料庫裡面,為何sql要加上模式名 資料庫名 訪問呢?其實這是把mysql或者sqlserver的思維代入dm資料庫造成的,mysql的體系架構是單例項多庫的,乙個使用者可以訪問多個資料庫,然後指定當前資料庫寫sql的時候就不用帶上資料庫名了。達夢的體系架構是單庫多例項的,也就是...