ArrayList,HashSet判断对象是否重复的原理

来源:互联网 发布:呼死你软件淘宝有卖吗 编辑:程序博客网 时间:2024/06/01 08:38
HashSet集合由于是无序的,其判断唯一的依据是元素类型的hashCodeequals方法的返回结果。规则如下:

      先判断新元素与集合内已经有的旧元素的HashCode

         如果不同,说明是不同元素,添加到集合。

         如果相同,再判断equals比较结果。返回true则相同元素;返回false则不同元素,添加到集合。

所以,使用HashSet存储自定义类型,如果没有重写该类的hashCodeequals方法,则判断重复时,使用的是地址值,如果想通过内容比较元素是否相同,需要重写该元素类的hashcodeequals方法。

     自定义类的equals方法仿照String重写hashcode() 代码如下

     String类型的调用自身的hashCode方法+int类型的*较大的数即可

    public int hashCode() {        int h = 0;        Iterator<E> i = iterator();        while (i.hasNext()) {            E obj = i.next();            if (obj != null)                h += obj.hashCode();        }        return h;    }

eclipse重写 equals() 和Hashcode()的快捷键:Alt+Shift+S

原创粉丝点击