利用HashSet给list去重

如果有一个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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值