概述
我們大家都知道,set集合的特點就沒有重復的元素,如果集合中的資料型別是基本資料型別,可以直接將list集合轉換成set,就會自動去除重復的元素,這個就相對比較簡單,
如下示例

輸出結果為

我們可以看到去重成功了,
在面試中被問到List去重問題,大部分回答都是會list和set互轉,利用set自動去重的方法去重,但是這樣的回答并不會得分,
元素為物件型別時
當list集合中存盤的型別是物件型別的時候,我們就不能簡單的只把list集合轉換成set集合,
我們定義一個物件類:

我們使用上面的set去重的方法去重:

運行后輸出的結果為:

我們可以看到第二個張三和最后一個張三,資訊都一樣,卻沒有被去重,
當list集合存盤的是物件時,我們需要在物件的物體類中去重寫equals()方法和hashCode()方法,如下:

此時運行上面的test方法,去重就成功了,
最后,我們拿出String中的equals()方法和hashCode()方法原始碼來加深認識:
equals()

比較兩個物件時,首先先去判斷兩個物件是否具有相同的地址,如果是同一個物件的參考,則直接回傳true,如果地址不一樣,則證明不是參考同一個物件,接下來就是挨個去比較兩個字串物件的內容是否一致,完全相等回傳true,否則false.
hashCode()

當equals方法被重寫時,通常有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定宣告相等物件必須具有相等的哈希碼,當然,List去重的方法很多,可以用for回圈或者使用java8新特性stream等等,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/160237.html
標籤:其他
上一篇:基于openvino 2019R3的推理性能優化的學習與分析 (四) 基于GPU的推理(inference)性能分析
