使用我自己的哈希映射java的哈希码

时间:2012-11-15 16:47:47

标签: java hashmap

我正在编写一个使用hashmap的java程序。我知道hashmap是如何工作的。如果我add(key,object),那么java会找到密钥的哈希码,并使用它来查找存储object的存储桶。
现在,我为hashcode拥有了自己的object实现。我想把它作为关键 - 像add(object.hashcode(),object)这样的东西。
是否有可能阻止java再次散列object.hashcode()?因为我已经在哈希码上实现hashcode()调用hashcode()将是浪费时间。

2 个答案:

答案 0 :(得分:5)

执行此操作的方法是实现hashCode()以在计算哈希值后对其进行缓存。请注意,这意味着您的对象是不可变的,或者至少在将对象放入地图后,hashCodeequals的字段不会发生变化。

您不需要使用哈希码作为密钥。而且,这几乎肯定是错误的方法,因为它实际上哈希表应该如何工作。哈希冲突是游戏的名称,因此哈希码仅用于寻址存储桶,但(名称全部说明)存储桶不包含一个,而是包含任意多个对象。必须由equals检查这些内容,以找到您要查找的确切内容。

鉴于您最初的想法是使用哈希码作为关键字,看起来您不是真的在地图之后,而是在HashSet之后。您只是将对象添加到集合中,稍后将要检查对象在其中的存在。那是一套。

答案 1 :(得分:1)

除非你有自己的实现,否则你不能这样做。原因是当您使用get方法时,散列用于拾取对象。