对于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
与{{1}}属性有关?
答案 0 :(得分:6)
绝对。 List
接口中指定的哈希码计算使得以不同方式排序的具有相同元素的两个列表的hashCode()
可能不同。 Set
接口中指定的哈希码保证两个Set
的哈希码在不同的顺序中具有相同的元素。
这与List
和Set
的不同平等概念自然对应。