2010-06-16 62 views

回答

6

如果实际List实现是完全符合的接口,提供的hashCode实现应该足够:

返回此列表的哈希码值。列表的哈希码被定义为以下计算的结果:

hashCode = 1; 
    Iterator i = list.iterator(); 
    while (i.hasNext()) { 
     Object obj = i.next(); 
     hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); 
    } 

List documentation

List接口需要符合实现基于所述列表的元素,以提供equals。因此,他们必须明确指定hashCode算法

2

为什么要为您的清单定义hashCode?当它already has it implemented(以及equals)?

(前提当然是java.util.List - 但是如果没有,上面的链接显示您可以使用自己的列表类型的具体实现)

0

列表的哈希码由列表的List interface定义。这可以用作对象哈希代码的一部分,尽管有些情况下您可能不想使用它 - 如果列表中的元素具有昂贵的哈希代码函数,或者列表中可以存储对该对象,并且如果使用列表的算法,则会发生堆栈溢出。在这种情况下,只需使用列表的长度或另一个散列值即可。

0

在Java库,List实现(LinkedListArrayList)使用由AbstractList提供的默认hashCode实现。其定义为:

int hashCode = 1; 
Iterator<E> i = iterator(); 
while (i.hasNext()) { 
    E obj = i.next(); 
    hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); 
} 
return hashCode; 
0

任何具体原因你刚才不会做:

Arrays.hashCode(<cast list to array>); 

喜欢的东西:

Arrays.hashCode((String []) myList.toArray());