記一次使用Set為List去重

2021-10-08 11:40:34 字數 1146 閱讀 2227

遇到乙個需求,把乙個重複的列表去重。我想這還不簡單,我立刻想到了使用set這個集合類,沒有具體研究過,但是知道這個就是可以自動去重的。

所以我寫了乙個方法:

private list

removerepeated

(list

beans)

return

newarraylist

<

>

(set)

;}

結果沒有達到理想的效果,我轉念一想,這是個類的物件,沒有重寫equals方法,肯定不能就這麼成功呀。然後我重寫了equals方法

public

boolean

equals

(@nullable object obj)

這樣總沒問題了吧,結果還是不行,我。。。

我在這個方法裡大了一堆log,結果乙個都沒顯示,好傢伙壓根就沒用這個方法。

我一氣之下,直接改用list

private list

removerepeated

(list

beans)

return

newarraylist

<

>

(set)

;}

結果成了,到這裡可以收工了,解決了就可以了嘛。

但是問題是為什麼使用arraylist可以,而hashset 不可以呢?這個問題如鯁在喉。

public

boolean

contains

(object o)

public

intindexof

(object o)

else

return-1

;}

原始碼很簡單,使用了indexof方法,在indexof方法中呼叫了為被包含類的equals方法,剛好我在類中定義了,所以就成了。

這個理解很容易,那hashset呢?

public

boolean

add(e e)

public v put

(k key, v value)

List集合去重以及集合set使用分析!

private static void removeduplicate listlist 使用linkedhashset實現list集合去重 這裡有個地方要注意,add操作是新增元素的引用,那麼這意味著如果你改變了該元素,list中對應的元素也被改變了 而addall操作則是拷貝,當你改變元素,li...

記一次list集合優化

已知某個列表list1有2000條資料,但是因為這個列表的某個欄位要從另乙個表查詢,所以根據乙個關聯的查詢條件查出來的另乙個list2有將近75000條資料,然後需要先迴圈第乙個list1,然後迴圈裡面取尋找list2裡面符合條件的,因為有某種業務邏輯,所以無法減少list2的sql查詢結果數量,所...

記一次Calendar的set與add

calendar是日期工具類,可以用來對日期做操作。比如 calendar c calendar.getinstance 這段 的作用是將時間往前推乙個小時,按照24小時制,所以結果是比當前時間小乙個小時 c.add calendar.hour of day,1 這段 的作用是將二十四小時制的小時位...