利用set集合進行list集合高效去重

2021-07-27 19:24:59 字數 1482 閱讀 7214

最近幫朋友做專案,自己也在學習資料結構和演算法分析,發現要想專案高效率的執行,資料結構和演算法是必須要掌握的一門技術,剛好專案中就碰到了處理資料的地方。

首先我先說說需求吧,有兩個集合a、b,在a集合去除b集合中people物件的資料,只要a集合中people的name和sublist集合中people的name相同就可以去除。怪我自己的語文功底不好,我直接上**吧。

物件**:

public

class

people

public

void

setname(string name)

public

intgetage()

public

void

setage(int age)

public

boolean

ischeck()

public

void

setcheck(boolean check)

}

模擬需求**:

arraylistmlist = new arraylist<>();

arraylistsublist = new arraylist<>();

for (int i = 0; i < 10000; i++)

for (int i = 0; i < 10000; i++)

//在mlist集合去除sublist集合中people物件的資料,只要mlist集合中people的name和sublist集合中people的name相同

//就可以去除

接下來我說說兩種實現方法

雙層for迴圈

剛開始為了實現功能,我用了這種方式,不過我對這種實現方式非常不滿,下面貼出我實現的**

for (people people : sublist) 

}}

剛開始用了幾十條資料進行測試,

看不出來效率怎麼樣,後來我用了10000條資料進行測試,發現耗時需要330毫秒

2.利用set集合不重複來進行實現

直接上**吧

/**

* 將列表中重複的使用者移除,重複指的是name相同

**@param userlist

*@return

*/public

static arraylistremoveduplicteusers(arraylistuserlist)

});s.addall(userlist);

return

new arraylist(s);

}

我用了同樣的方法測試,發現耗時竟然17毫秒,這種效率比雙層for迴圈高出幾十倍,如果再用更多的資料進行測試的話,效率會高出上百倍

可見乙個好的實現方式,效率能高出上百倍,所以資料結構和演算法是必不可少的,這個必須得學習掌握。

List集合 Set集合

一 請簡述list介面的特點。v 它是乙個元素訪問有序的集合。例如,存元素的順序是11 22 33。那麼集合中,元素的儲存就是按照11 22 33的順序完成的 v 它是乙個帶有索引的集合,通過索引就可以精確的操作集合中的元素 與陣列的索引是乙個道理 v 集合中可以有重複的元素,通過元素的equals...

資料結構 單列集合 List集合 Set集合

1 陣列特點 查詢快 位址是連續的,通過首位址可以找到陣列,通過索引 可以快速查詢某個元素 增刪慢 陣列的長度是固定的,要增刪某個元素,必須重新建立乙個陣列,把資料複製過來 2 arraylist特點 底層也是使用陣列實現,兼具陣列的特點 3 linkedlist特點 底層是鍊錶結構 增刪快 因為如...

利用Map集合將list集合中資料進行拆分。

如下 中orderlist為原生的資料集合體。根據standardid欄位值來進行區分資料。hashmap集合以 standardid為key,templist 為value param orderlist return map title productionequipmentisrepeat d...