我注意到在Java中,您可以创建一个包含偶数对象的HashSet。例如,您可以创建一个类(比如class1),其中包含int,double和数组作为变量,然后您可以说 -
HashSet<class1> = new HashSet<>();
很明显,在一个整数的HashSet中,必须使用一个哈希函数,该函数将整数作为输入,并告诉函数将哪个存储桶存入。但对于这个class1变量,究竟是什么进行了哈希?有三个不同的字段(可能没有一个可能是原语)。
答案 0 :(得分:2)
设置和映射使用的“哈希函数”是hashCode()
。除非您明确覆盖hashCode()
,否则将使用实现as defined in Object
。也就是说,将产生仅基于参考而在字段上根本不存在的散列。
从上面的链接:
尽管合理可行,但是由类
Object
定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java TM 编程语言不需要此实现技术。)
答案 1 :(得分:1)
JVM中只有一个类对象用于给定的类。
类对象的哈希码是“识别哈希” - 根据对象中的实现。