最近在公司要用到大量數據去重,然後網上一查說用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方法纔可.