java使用set实现对象去重

1、list与set的区别

set中不包含重复的元素(hashCode不能相同)
list中可包含重复的元素

2、具体操作

插入set,并输出:

   public static void main( String[] args ) {
        Set<User> userSet = new HashSet<>();
        User user1 = new User(1, "张三");
        User user2 = new User(1, "李四");
        userSet.add(user1);
        userSet.add(user2);
        for (User user : userSet) {
            System.out.println(user);
        }
    }

对User对象重写equals,hashCode方法,唯一标识为id

public class User {

    private Integer id;

    private String name;

    public User( Integer id, String name ) {
        this.id = id;
        this.name = name;
    }
    /**
     * 如果对象类型是User,先比较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;

            // 比较每个属性的值一致时才返回true
            if (user.id.equals(this.id)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 重写hashcode方法,返回的hashCode一样才再去比较每个属性的值
     */
    @Override
    public int hashCode() {
        return id.hashCode();
    }

    /**
     * 为了方便查看,重写toString方法
     */
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

结果为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值