问一个java中小问题

就是arraylist集合来比较自定义对象是否有值相等的时候,只用的equals方法。
但是hashset集合在比较自定义对象是否有值相等的时候,除了equals方法还要hashcode方法。并且在翻以前笔记的时候发现这么一段话。hashset在比较的时候尽量让hashcode
的值不相等,从而减少调用equals方法,因为当hashcode值相等的时候才会调用equals方法。
我现在疑惑的是,既然hashcode值相等的时候才会调用equals方法。那arraylist的hashcode是不是都是相等的???

比较的时候ArrayList不会调用hashCode,而且hashcode相等不相等取决于你重写的hashCode()方法。

arrayList不调用HashCode()方法,对于一个自定义的对象如果不重写HashCode()方法,会默认调用父类继承父类的HashCode()方法,
也就是Object的HashCode()方法,那么Object的HashCode()方法是怎么写的呢 ,查看JDK源码:** public native int hashCode();**

没错调用的是本地库中的方法,这个就没办法了。但一般情况下HashCode()会代表这个对象在内存中的地址。因为HashSet()中存放的元素是
不可重复的,他会先比较HashCode()方法,之后在比较equals()方法,所以想要判断连个对象是同一个项的话,就得保证他的HashCode()方法
和equals()方法相同,所以要重写HashCode()方法