试图理解 ArrayList 的 hashCode() 实现

Trying to understand hashCode() implementation of the ArrayList

查看java源代码,在class AbstractList的hashCode()方法中,我遇到了难以理解的构造。这是 ArrayList 的 hashCode 方法的实现。我不明白它是如何使用 for-each 进行迭代的。

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

E 是元素的类型。但是 class(type) 指针 this 属于哪个?

E e指的是泛型里面的ArrayList<E>(见E?)

把它想象成

ArrayList<String> list 
for(String e : list) {

只是因为你 在列表中 你的 list 变成了 this

List<Person> personList = new ArrayList<Person>();

this - 它将引用 personList
e - 它将引用 Person class

的对象

But to which class(type) pointer this belongs?

thishashCode 被调用的列表。所以 compile-time 类型是 AbstractList<E>.

它说 "for every element in this list, include that element's hash code in the result"。