我注意到在 Java 中,您可以创建一个包含偶数对象的 HashSet。例如,您可以创建一个类(例如 class1),其中包含一个 int、double 和数组作为变量,然后您可以说 -
HashSet<class1> = new HashSet<>();
很明显,在整数的 HashSet 中,必须使用一个哈希函数,该函数将整数作为输入,并告诉函数将其存储在哪个桶中。但是对于这个 class1 变量,哈希到底是什么?存在三个不同的字段(并且可能没有一个可能是原语)。
集合和映射使用的“哈希函数”是hashCode()
. 除非您显式覆盖hashCode()
,否则将使用中定义的实现。Object
也就是说,将生成仅基于引用而不是字段的哈希。
从上面的链接:
在合理可行的情况下,类定义的 hashCode 方法
Object
确实为不同的对象返回不同的整数。(这通常通过将对象的内部地址转换为整数来实现,但 Java TM编程语言不需要这种实现技术。)
对于给定的类,JVM 中只有一个类对象。
类对象的哈希码是“识别哈希”——根据 Object.hash 中的实现。