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 + '\'' +
                '}';
    }
}

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

猜你喜欢

转载自blog.csdn.net/qq_43532386/article/details/111085496