2019独角兽企业重金招聘Python工程师标准>>>
ArrayList中是允许出现重复的数据的
ArrayList AbstractListListRandomAccessCloneablejava.io.Serializable
List是一个接口
AbstractList是一个抽线方法定义了hashCode方法和equals方法
hashCode:
public int hashCode() {int hashCode 1;for (E e : this)hashCode 31*hashCode (enull ? 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() e1.next();Object o2 e2.next();if (!(o1null ? o2null : o1.equals(o2)))return false;}return !(e1.hasNext() || e2.hasNext());}
Example :
List l1new ArrayLlist();l1.add(0);List l2new ArrayList();l2.add(0);System.out.println(l1.equals(l2); //true
因为 由于Integer的hashCode计算方法是直接返回value所以0的hashCode就是0,再根据AbstractList的hashCoded的计算方法可以计算出
l1.hashCode31
l2.hashCode31
所以相等可以在AbstractList的hashCode方法中加个断点debug一下。或者
List l1new ArrayLlist(){
override public int hashCode(){
可以在这里观察
}
}
转:https://my.oschina.net/endeavour/blog/542715
【感谢龙石数据为本站数据中台建设方案 http://www.longshidata.com/pages/government.html,感恩 】