最近在公司要用到大量数据去重,然后网上一查说用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方法才可.