Java 试图理解ArrayList的hashCode()实现

Java 试图理解ArrayList的hashCode()实现,java,arraylist,hashcode,Java,Arraylist,Hashcode,通过查看java源代码,我在AbstractList类的hashCode()方法中遇到了无法理解的for me构造。这是ArrayList的hashCode方法的实现。我不明白它是如何迭代的 public int hashCode() { int hashCode = 1; for (E e : this) //<--??? hashCode = 31*hashCode + (e==null ? 0 : e.hashCode()); return

通过查看java源代码,我在AbstractList类的hashCode()方法中遇到了无法理解的for me构造。这是ArrayList的hashCode方法的实现。我不明白它是如何迭代的

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

对于(E E:this)/,
E
指的是
ArrayList
中的泛型类型(参见
E

把它想象成

ArrayList<String> list 
for(String e : list) {
ArrayList列表
for(字符串e:列表){

仅因为您在列表中您的
列表
变为
E
指的是
数组列表中的泛型类型(请参见
E
?)

把它想象成

ArrayList<String> list 
for(String e : list) {
ArrayList列表
for(字符串e:列表){
只因为你在列表中,你的
列表变成了
这个
list personList=new ArrayList();

-它将引用
个人列表

e
-它将引用
Person
类的对象

List personList=new ArrayList();

-它将引用
个人列表

e
-它将引用
Person
类的对象

但是这个指针属于哪个类(类型)

this
是调用了
hashCode
的列表。因此编译时类型是
AbstractList

它的意思是“对于列表中的每个元素,在结果中包含该元素的哈希代码”

但是这个指针属于哪个类(类型)

this
是调用了
hashCode
的列表。因此编译时类型是
AbstractList


它的意思是“对于列表中的每个元素,在结果中包含该元素的哈希代码”。

这太简单了。我真丢脸。这太简单了。我真丢脸。