【发布时间】:2013-11-17 00:40:30
【问题描述】:
我正在为 java 中的哈希映射构建一个复合键,并希望为这些对象中的每一个确定我自己的哈希码。我的问题是以下两种方法中最好的方法是什么。我的复合键具有三个 String 属性和一个 int 属性。
public int hashCode(){
return (className + methodName + uniqueNumber).hashCode();
}
public int hashCode(){
return (className + methodName + desc + uniqueNumber).hashCode();
}
我必须有 className、methodName 和唯一编号,以保证每个键都有唯一的哈希码。我想采用碰撞机会最小的方法。我的直觉是,我“添加”到哈希映射函数的属性越多,发生冲突的可能性就越小。但是,我并不完全确定这是正确的。
【问题讨论】:
-
相信在SO上还有很多类似的问题......
-
如果要保证没有冲突,
return uniqueNumber; -
uniqueNumber 是一个持续递增的数字,我无法直接控制其值。仅使用 uniqueNumber 将生成唯一的哈希值,但我将失去在哈希图中引用特定值的能力
-
这个哈希码是干什么用的?通常是从对象的某些字段生成的,应该和
equals()的实现一致 -
@user2736423:您在
equals中使用了哪些字段?如果uniqueNumber在其中,在hashCode中使用它就完成了。否则,您不得在hashCode中使用它,否则将不再有用。
标签: java performance hash hash-collision