HashSet底层HashMap的键是哈希值还是对象?OCP书籍表述存疑
问题解答
- 书籍的这句话表述不准确甚至错误,你的理解和代码验证是正确的。
- Java中
HashSet的底层确实依赖HashMap实现,但实际存储逻辑是:- HashMap的键就是HashSet中的元素本身(也就是你代码里的
A类实例) - HashMap的值是一个固定的静态常量
PRESENT(一个空Object对象,仅作为占位符使用)
- HashMap的键就是HashSet中的元素本身(也就是你代码里的
- 元素的哈希值是调用
hashCode()方法返回的结果,它的作用是计算元素在哈希表中的存储索引位置,而非作为HashMap的键。书籍的表述混淆了哈希值的作用与HashMap键的实际内容。 - 你通过反射获取到的HashMap中键为
A对象本身,这完全符合JDK的真实实现逻辑。
内容的提问来源于stack exchange,提问作者bridgemnc
相关产品推荐
相关产品推荐

