博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArrayList 的hashCode 和 equals
阅读量:6626 次
发布时间:2019-06-25

本文共 1380 字,大约阅读时间需要 4 分钟。

hot3.png

ArrayList中是允许出现重复的数据的

ArrayList<> AbstractList<>        List<>RandomAccessCloneablejava.io.Serializable

List<E>是一个接口

AbstractList<E>是一个抽线方法,定义了hashCode方法和equals方法

hashCode:

   public int hashCode() {        int hashCode = 1;        for (E e : this)            hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());        return hashCode;    }

equals:基本数据类型直接判断,引用数据类型根据hashCode判断

public boolean equals(Object o) {        if (o == this)            return true;        if (!(o instanceof List))            return false;        ListIterator
 e1 = listIterator();        ListIterator e2 = ((List) o).listIterator();        while (e1.hasNext() && e2.hasNext()) {            E o1 = e1.next();            Object o2 = e2.next();            if (!(o1==null ? o2==null : o1.equals(o2)))                return false;        }        return !(e1.hasNext() || e2.hasNext());    }

Example :

List
 l1=new ArrayLlist
();l1.add(0);List
 l2=new ArrayList
();l2.add(0);System.out.println(l1.equals(l2);  //true

因为: 由于Integer的hashCode计算方法是直接返回value,所以0的hashCode就是0,再根据AbstractList的hashCoded的计算方法可以计算出:

l1.hashCode=31

l2.hashCode=31

所以相等,可以在AbstractList的hashCode方法中加个断点,debug一下。或者

List<Integer> l1=new ArrayLlist<Interger>(){

        override public int hashCode(){

                可以在这里观察

        }

}

转载于:https://my.oschina.net/endeavour/blog/542715

你可能感兴趣的文章
Flash AS3 Loader的一些总结
查看>>
.net(vs2010)调试技巧
查看>>
哈希方法
查看>>
45个纯 CSS 实现的精美边框效果【附在线演示和源码】【下篇】
查看>>
js的逻辑 OR 运算符- ||
查看>>
[SQL Server]一次执行资料夹内的.sql 指令码
查看>>
SQLServer中的死锁的介绍
查看>>
【计算机视觉】粒子滤波跟踪
查看>>
hadoop集群扩展
查看>>
操作系统诊断
查看>>
[Compose] 19. Leapfrogging types with Traversable
查看>>
Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
查看>>
2015年度新增开源软件排名TOP100
查看>>
设计模式 之 原型
查看>>
BZOJ 2456: mode(新生必做的水题)
查看>>
SSM实战——秒杀系统之高并发优化
查看>>
View State
查看>>
自旋锁spinlock解析
查看>>
【java.lang.UnsupportedClassVersionError】版本不一致出错
查看>>
Ubuntu16.04 安装RabbitMQ
查看>>