文档章节

HashSet中如何去除重复的对象

strict_nerd
 strict_nerd
发布于 2015/05/22 17:39
字数 356
阅读 2548
收藏 14

通过查看java底层api实现可以发现在hashset中比较2个值是否相等,他是比较的hash值和equals方法,所以我们只需要重写这2个方法即可。

实例程序:

package com;
import java.util.HashSet;
import java.util.Set;
 
public class SetDemo {
     
    public static void main(String[] args) {
       
        User user0 = new User(1, "admin");
        User user3 = new User(2, "user");
        User user1 = new User(2, "user");
        User user2 = new User(3, "admin");
        String s1 = "hello";
        String s2 = "hello";
      //  boolean equals = user.equals(admin);
        System.out.println(s1==s2);
       // System.out.println(equals);
        Set<User> userSet = new HashSet<User>();
        userSet.add(user3);
        userSet.add(user2);
        userSet.add(user0);
        userSet.add(user1);
        // 输入结果 admin1  admin3  user2
        for(User u : userSet){
            System.out.print(u.username + u.id + "\t");
        }
    }
}
 
class User{
     
    protected Integer id;
     
    protected String username;
     
    public User(Integer id, String username){
        this.id = id;
        this.username = username;
    }
 
 
    /**
     * 如果对象类型是User 的话 则返回true 去比较hashCode值
     */
    @Override
    public boolean equals(Object obj) {
        if(obj == null) return false;
        if(this == obj) return true;
        if(obj instanceof User){ 
            User user =(User)obj;
//          if(user.id = this.id) return true; // 只比较id
            // 比较id和username 一致时才返回true 之后再去比较 hashCode
            if(user.id == this.id && user.username.equals(this.username)) 
             return true;
            }
        return false;
    }
 
 
 
    /**
     * 重写hashcode 方法,返回的hashCode 不一样才认定为不同的对象
     */
    @Override
    public int hashCode() {
//      return id.hashCode(); // 只比较id,id一样就不添加进集合
        return id.hashCode() * username.hashCode();
    }
 
     
}

如有问题,请微信扫码回复

 

© 著作权归作者所有

strict_nerd
粉丝 11
博文 53
码字总数 27387
作品 0
郑州
程序员
私信 提问
java的Set接口详解

set接口是继承于collection接口,是collection的一个分支. 一.hashSet 1.hashSet是可以用来去除集合中的重复的元素 代码举例: HashSet 结果为: 2.LinkedHashSet是hashSet的子类,特点是去重 有...

zxc1258012580的博客
2017/12/21
0
0
java去除List中重复的元素

java去除List中重复的元素 如果用Set ,倘若list里边的元素不是基本数据类型而是对象, 那么请覆写Object的boolean equals(Object obj) 和int hashCode()方法. return new ArrayList(new Hash...

as007012012
2017/05/04
0
0
去除List列表中重复值(3种解决方法)

public static void main(String[] args) {String[] ar = { "dd", "c", "dd", "ff", "b", "e", "e" };ArrayList list = new ArrayList();for (int i = 0; i < ar.length; i++) { }System.out......

小克898
2013/07/02
176
0
好程序员Java教程分享HashSet实现去除重复元素

好程序员Java教程分享HashSet实现去除重复元素,首先 HashSet当中有自己封装了add方法 public boolean add(E e) { return map.put(e, PRESENT)==null; } private transient HashMap <E,Objec......

好程序员IT
07/03
34
0
java 删除List 中的重复数据

java 删除List 中的重复数据 1. 循环list中的所有元素然后删除重复 public static List removeDuplicate (List list){ for (int i = 0; i < list.size() - 1; i++) { for (int j = list.size......

xunfang
2016/02/23
97
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
昨天
64
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
昨天
26
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
昨天
43
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
昨天
27
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
昨天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部