0

我注意到在 Java 中,您可以创建一个包含偶数对象的 HashSet。例如,您可以创建一个类(例如 class1),其中包含一个 int、double 和数组作为变量,然后您可以说 -

HashSet<class1> = new HashSet<>();

很明显,在整数的 HashSet 中,必须使用一个哈希函数,该函数将整数作为输入,并告诉函数将其存储在哪个桶中。但是对于这个 class1 变量,哈希到底是什么?存在三个不同的字段(并且可能没有一个可能是原语)。

4

2 回答 2

2

集合和映射使用的“哈希函数”是hashCode(). 除非您显式覆盖hashCode(),否则将使用中定义的实现。Object也就是说,将生成仅基于引用而不是字段的哈希。

从上面的链接:

在合理可行的情况下,类定义的 hashCode 方法Object确实为不同的对象返回不同的整数。(这通常通过将对象的内部地址转换为整数来实现,但 Java TM编程语言不需要这种实现技术。)

于 2013-08-29T02:15:36.553 回答
1

对于给定的类,JVM 中只有一个类对象。

类对象的哈希码是“识别哈希”——根据 Object.hash 中的实现。

于 2013-08-29T02:20:28.727 回答