【发布时间】:2019-05-08 13:33:00
【问题描述】:
在HashMap的实现细节中,我可以阅读:
When using comparators on insertion, to keep a
* total ordering (or as close as is required here) across
* rebalancings, we compare classes and identityHashCodes as
* tie-breakers.
如果我有常量 hashCode 和好的 equals 并且我的类没有实现 Comparable 它将如何打破关系以及如何构造树?
我的意思是 - bucket 将变成一棵树,并使用System.identityHashCode 打破平局。
然后我将尝试使用不同的实例调用containsKey 方法(这将具有相同的hashCode 和a.equals(b) == true)它将具有不同的identityHashCode 所以树可能会被错误的节点遍历(左而是正确的)并且它不会找到密钥?
是我遗漏了什么还是这是正常行为?
【问题讨论】:
-
如果您有两个对象
a和b,其中a.equals(b)为真,那么调用get返回哪个对象又有什么关系? -
我猜红黑树不会使用equals,而是比较元素。
-
@rgettman
get两者都不会返回,因为它返回一个 value 而equals是在 keys 上调用的。