记录一个使用Set去重复时遇到的问题

Set去重复机制:在往Set中插入新的对象时,首先会用该对象的hashCode()与集合中已经存在对象的hashCode()做比较,若返回false则可以插入,若返回true则进而比较equals();返回false则可以插入,返回true侧不能插入。

class User {

    private String name;

        public User(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

}
        User user1 = new User("张三");
        User user2 = new User("张三");

        Set<User> set1 = new LinkedHashSet<User>();
        Set<User> set2 = new LinkedHashSet<User>();
        set1.add(user1);
        set2.add(user2);
        
        System.out.println("set1.remove(user2)--->" + set1.remove(user2));

结果:
set1.remove(user2)--->true

若直接改变Set中的元素,则出现的结果会不一样

        User user1 = new User("张三");
        User user2 = new User("李四");

        Set<User> set1 = new LinkedHashSet<User>();
        Set<User> set2 = new LinkedHashSet<User>();
        set1.add(user1);
        set2.add(user2);

        user1.setName("李四");

        System.out.println("set1.remove(user2)--->" + set1.remove(user2));

结果:
set1.remove(user2)--->false

至于为啥,我也不知道!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,347评论 19 139
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,711评论 0 16
  • 史铁生:我与地坛 文/史铁生 我才想到,当年我总是独自跑到地坛去,曾经给母亲出了一个怎样的难题。 她不是那种光会疼...
    叫我小小清啊阅读 3,126评论 0 3
  • 喜欢紫砂壶和喜欢普洱茶是近10年的事,普洱茶是有位成功人士带着我学习过的,紫沙壶也是一位我敬重的老哥带着我...
    太原家老冯阅读 2,350评论 0 0