使用我自己的哈希码进行哈希映射Java



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

方法是

实现hashCode(),以便在计算哈希值后对其进行缓存。请注意,这意味着您的对象是不可变的,或者至少在将对象放入地图后,hashCodeequals的字段不会更改。

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

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

除非你有自己的实现,否则你不能这样做。 原因是哈希用于在使用 get 方法时选取对象。

最新更新