它对于 List 接口的每个(真正的)实现都是相同的(如果它支持添加元素)。该.hashCode
方法的行为定义List.hashCode()
如下:
返回此列表的哈希码值。列表的哈希码定义为以下计算的结果:
int hashCode = 1;
Iterator<E> i = list.iterator();
while (i.hasNext()) {
E obj = i.next();
hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
}
这确保了list1.equals(list2)
意味着list1.hashCode()==list2.hashCode()
对于任何两个列表,
list1
并且list2
,正如 的一般合同所要求的那样Object.hashCode()
。
正如 gloomcoder 所示,它只AbstractList
包含这个实现,因此不是每个List
接口的实现者都必须再次执行此操作。
例如,您也可以编写Arrays.asList("1", "2").hashCode()
并得到相同的 2530(只要您不更改 的hashCode()
实现String
)。