0

对于 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,还是orderedun-ordered它们的属性有关?

4

1 回答 1

6

绝对地。接口中指定的哈希码计算List使得hashCode()具有相同元素以不同方式排序的两个列表中的可能会不同。接口中指定的哈希码Set保证了两个Set相同元素不同顺序的哈希码相同。

List这自然对应于和的不同相等概念Set

于 2013-02-08T17:32:59.370 回答