我可以根据添加到vector的元素了解哈希码如何获取值吗?
Vector v = new Vector();
//Add elements to Vector
v.add("1");
System.out.println(v.hashCode());
v.add("2");
System.out.println(v.hashCode());
v.add("=");
System.out.println(v.hashCode());
哈希码值为
80
2530
78491
答案 0 :(得分:4)
它对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()
, 根据{{1}}的一般合同的要求list1
和list2
。
正如glowcoder所示,Object.hashCode()
只包含此实现,因此并非AbstractList
接口的每个实现者都必须再次执行此操作。
例如,您也可以编写List
并获得相同的2530(只要您不更改Arrays.asList("1", "2").hashCode()
的{{1}}实现)。
答案 1 :(得分:2)
因为Vector扩展了AbstractList,所以它将它用于hashCode。这是它的作用。
public int 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;
}