大家好,又见面了,我是你们的朋友全栈君。
如果有一个string的list要去重,那么可以用以下代码:
List<String> orgIds=........//orgIds即可能存在重复数据的String的集合
//利用HashSet去重
Set<String> set = new HashSet<String>(orgIds);
orgIds = new ArrayList<String>(set);
其原理是,HashSet实现了Set接口,它不允许集合中出现重复元素。但如果不是String的集合而是对象的集合,就不能简单的用上诉方法来去重了。因为HashSet判断是否重复,对象是否相同,其实是调用了对象的hashCode和equals方法来判断是否相同。例如:
//s和t是相同的。
//而StringBuffer对象自身没有hashCode方法,继承Object的默认方法获得的hashcode是对象地址,故而sb和tb不同。
String s=new String("OK");//hashcode: 3030
String t="Ok"; /hashcode: 3030
StringBuffer sb=new StringBuffer(s); //hashcode:20526976
StringBuffer tb=new StringBuffer(t); //hashcode:20527144
综上,引申出来。如果我们自定义了一个对象,也可以利用HashSet来去重,只需要定义该对象的equals和hashCode方法,可定义为该对象的所有属性都相同才为相同,也可定义为ID相同则视为对象相同,根据需要定义即可。需要注意的是,自定义的equals和hashCode必须兼容,即:
public class Employee{
public int id;
public String name="";
//相同id对象具有相同hashCode
public int hashCode(){
return id;
}
//则equals必须比较id
public boolean equals(Employee x){
if(this.id==x.id) return true;
else return false;
}
}
参考引用:https://www.cnblogs.com/runwulingsheng/p/5208762.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141399.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...