美文网首页
记录一个使用Set去重复时遇到的问题

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

作者: sushengren | 来源:发表于2018-03-08 14:56 被阅读0次

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

至于为啥,我也不知道!

相关文章

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

    Set去重复机制:在往Set中插入新的对象时,首先会用该对象的hashCode()与集合中已经存在对象的hashC...

  • Vue-cli 踩坑

    记录Vue-cli时遇到的问题,方便大家寻找 搭建 如果遇到网络问题使用阿里镜像 npm config set r...

  • 使用Set方法给Cell赋值时报错的问题

    在使用Set方法给cell赋值时遇到的问题:

  • ES6(一)

    一、Set结构 Set数据结构类似于数组,成员的值是唯一的,没有重复值。(数组去重!!) 向set加入值时,使用'...

  • teradata建表DDL

    ●是否允许重复记录❍SET 不允许记录重复CREATE SET TABLE table1 ...❍MULTISET...

  • Day2 去重

    去重,是一个经常遇到的问题,ES6给我们提供了Set数据结构,对于js基本类型去重使用此方法比较有效Set转Arr...

  • python之集合

    集合(set):是一个无序不重复元素的集。基本功能是去重。可以使用大括号或者set()函数创建set集合,注意:创...

  • Python_list 去重

    作者:Gakki 01. 使用内置 set 方法去重 set() 函数创建一个无序不重复元素集,可进行关系测试,删...

  • 数组去重

    数组去重复的方法有哪些 1.使用set functionuniquearray(array){ let uniqu...

  • 【Vue冲突解决】 [Vue warn]: The comput

    背景 在使用Vue开发时,遇到了这样一个问题。如下所示: 问题分析 锁定问题很明显问题是fields属性被重复声明...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/tnwbwxtx.html