兩個ArrayList做差集效率問題

工作中需要將表中重複數據只留一條,其餘刪掉,第一想法就是用SQL去執行,

但是由於數據有幾十萬條,SQL的效率十分低下,於是寫個程序去執行,

也方便看到執行的進度,我是這樣做的:

先把表中所有數據的id查出來存進一個ArrayList中(list1),

再將不重複的記錄id查出來存進另一個ArrayList(list2),

再將重複數據的最小id查出來存進第三個ArrayList中(list3),

然後開始做差集:

list1.removeAll(list2);
list1.removeAll(list3);

跑起來問題就來了,超慢,查了下原因:

ArrayList  它的時間複雜度最差情況就是O(n*n*m)。


n是list1大小,m是list2大小,那我的天,計算了下我的複雜度有80千兆,難怪這麼慢,


於是按照查到的方法將list1類型改爲LinkedList,將list2,list3類型改爲HashSet,


果然,跑起來一會兒差集就完成了,LinkedList 它的時間複雜度最差情況是O(n*m),


那最差也就千萬級的複雜度,小多了,並且LinkedList對於刪除操作比ArrayList快多了,


HashSet對於查找比較快,誒,大學那些課都白學了,不說了,先哭會兒大哭大哭大哭

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章