对于 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 的hash code 计算不能和AbstractSet 的一样?这与 中可能的元素重复List
与 中的唯一元素保证有关Set
,还是ordered
与un-ordered
它们的属性有关?