set 去重對象Object

最近在公司要用到大量數據去重,然後網上一查說用set最簡單方便了(大家應該知道set裏面的數據是不允許重複的),用法其實很簡單網上都有。然後我就用了發現沒有成功,根本沒有達到去重效果(我造的數據裏面有2條一模一樣的數據)。


之後我就上網又查了查,原來它也分情況的。

第一種就是你的數據是基本類型的話,直接可以按照網上的例子做,簡單的就一個有重複數據的list放到set裏面,再導出到list,你會發現就達到去重效果了。

第二種是你的數據是對象(我這邊的數據是對象),那你按照上訴方式是達不到去重的,一定要重寫你那個類的equals方法和hashcode方法(這兩個方法是Obect的方法)。說起這兩個方法,大家對第一個方法肯定不陌生的。equals是用於判斷值是否想等的時候用的,以前我們經常會去網上了解== 和equals的區別。我在這裏簡單的說一下,當比較的是基礎類型的時候兩者都可,當爲引用類型的時候(java類),其實兩者都是比較的是引用對象的引用內存地址,哪有人會問了那我們之前說==和equals的區別就是當比較的類型是引用類型的時候equals可以比較值的,你現在又說比較的都是內存地址呢?其實我們在用equals比較對象的時候一般我們都是比較對象裏面的string,或者其它類型的屬性,String類的equal,hashcode是重寫過的,所以大家再使用String的時候是直接比較其值的,如果String沒有重寫這兩個方法的話,equal還是比較對象的內存地址的


總結:

去看equal的方法,其實本身他也是用==去比較的,equals()默認是用"=="比較兩個對象的內存地址,如果想要比較兩個對象的內容,要重寫equals(),hashcode方法纔可.

發佈了60 篇原創文章 · 獲贊 66 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章