0

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

4

2 回答 2

6

这样做的方法是实现hashCode()在计算哈希值后对其进行缓存。请注意,这意味着您的对象是不可变的,或者至少是在将对象放入地图后贡献hashCode并且equals不会更改的字段。

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

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

于 2012-11-15T16:50:47.237 回答
1

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

于 2012-11-15T16:50:21.983 回答