试图理解 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?
this
是 hashCode
被调用的列表。所以 compile-time 类型是 AbstractList<E>
.
它说 "for every element in this list, include that element's hash code in the result"。
查看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?
this
是 hashCode
被调用的列表。所以 compile-time 类型是 AbstractList<E>
.
它说 "for every element in this list, include that element's hash code in the result"。