AbstractList の場合、ハッシュ コードは次のように計算されます。
int hashCode = 1;
Iterator<E> i = list.iterator();
while (i.hasNext()) {
E obj = i.next();
hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
}
一方、AbstractSet の場合、次のように計算されます。
int h = 0;
Iterator<E> i = iterator();
while (i.hasNext()) {
E obj = i.next();
if (obj != null)
h += obj.hashCode();
}
質問: AbstractList のハッシュ コード計算が AbstractSet のハッシュ コード計算と同じにならないのはなぜですか? これは、 での要素の重複の可能性と でのList
一意の要素の保証と関係がありますかSet
、それともそれらのプロパティとの関係ordered
ですか?un-ordered