利用HashSet给list去重[通俗易懂]

利用HashSet给list去重[通俗易懂]如果有一个string的list要去重,那么可以用以下代码:List<String>orgIds=……..//orgIds即可能存在重复数据的String的集合//利用HashSet去重Set<String>set=newHashSet<String>(orgIds);orgIds=newArrayList<String…

大家好,又见面了,我是你们的朋友全栈君。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141399.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux之使用samba实现文件共享

    早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了NFS开源文件共享程序,NFS是一个能够将多台L

    2021年12月28日
    52
  • OSChina 技术周刊第五期 —— 2014 非常好用的开源 Android 测试工具

    OSChina 技术周刊第五期 —— 2014 非常好用的开源 Android 测试工具

    2021年9月1日
    54
  • openssl升级方法(升级怎么玩)

    1.Linux系统版本:[root@bogon~]#cat/etc/redhat-releaseCentOSLinuxrelease7.3.1611(Core)图1查看Linux系统版本2.查看Openssl安装的版本[root@bogon~]#opensslversionOpenSSL1.0.2k-fips26Jan2017图2查看openssl版本3.查看Openssl路径[root@bogon~]#which

    2022年4月13日
    88
  • java游戏的扩展名_java源程序文件的扩展名是什么?

    java游戏的扩展名_java源程序文件的扩展名是什么?目前护理已经发展为一门专业,源程是因为其具有以下特征序文常用组合体的组合方式有叠加和切割。()扩展铅垂线的投影特性包括()物体上互相平行的线段,源程其轴测投影互相()轴线为铅垂线的圆柱被两相交平面截切,序文其中一个面为水平面,另一个面为侧平面,其截交线的空间形状为()扩展空间点A到V面的距离等于()两个圆柱体相贯穿,源程共同外切于同一球体,相贯线为两条椭圆曲线。()H、序文W两投影投影连线垂直…

    2022年7月7日
    22
  • 最受欢迎的8个Python框架,满足你的各类需求「建议收藏」

    最受欢迎的8个Python框架,满足你的各类需求「建议收藏」今天给大家分享几个最受欢迎的Python框架。这些框架包括Web开发,高性能网络通信,测试,爬虫等等,如果你正在学习Python,那么应该可以满足你。1DjangoDjango应该是最出名的Python框架,是一款在数据库功能、后台功能、模板系统、网址匹配、缓存系统等方面有“先天”优势的开源框架。它可以通过几行简单的代码就让你的网站拥有一个强大的后台,轻松管理你的内容;强大,易扩展的模板系统,设计简易,代码,样式分开设计,更容易管理。小编整理的一整套系统的p-ython学习教程从最基础的

    2022年5月10日
    43
  • JS判断客户端是否已安装ActiveX控件「建议收藏」

    JS判断客户端是否已安装ActiveX控件「建议收藏」if(document.all.player.object==null){alert(“请先安装播放器控件!”)}

    2022年5月15日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号