遇到乙個需求,把乙個重複的列表去重。我想這還不簡單,我立刻想到了使用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 這段 的作用是將二十四小時制的小時位...