In the implementation details of HashMap
, I can read:
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.
If I have constant hashCode
and fine equals
and my class doesn't implement Comparable
how exactly it will break the ties and how the tree will be constructed?
I mean - bucket will transform to a tree and will use System.identityHashCode
to break a tie.
Then I will try to call containsKey
method with a different instance (which will have the same hashCode
and a.equals(b) == true
) it will have different identityHashCode
so is it possible that tree will be traversed by the wrong node (left instead right) and it will not find a key?
Am I missing something or this is normal behavior?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…