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

Ash*_*win 0 java hashmap

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

Mar*_*nik 5

执行此操作的方法是实现hashCode()在计算哈希值后对其进行缓存.请注意,这意味着您的对象是不可变的,或者至少在将对象放入地图后有助于hashCode并且equals不会更改的字段.

您不需要使用哈希码作为密钥.而且,这几乎肯定是错误的方法,因为它实际上不是哈希表的工作方式.散列冲突是游戏的名称,因此散列码仅用于寻址存储桶,但(名称全部说明)存储桶不包含一个,而是包含任意多个对象.必须通过检查这些equals来找到您正在寻找的确切位置.

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