gpt4 book ai didi

java - 为什么key的hashcode有大于等于小于等于三种情况,为什么会出现其他情况?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:31 28 4
gpt4 key购买 nike

java.util.HashMap.TreeNode#putTreeVal()中有一些代码,如下所示:

if ((ph = p.hash) > h)
dir = -1;
else if (ph < h)
dir = 1;
else if ((pk = p.key) == k || (k != null && k.equals(pk)))
return p;
else if ((kc == null &&
(kc = comparableClassFor(k)) == null) ||
(dir = compareComparables(kc, k, pk)) == 0) {
if (!searched) {
TreeNode<K,V> q, ch;
searched = true;
if (((ch = p.left) != null &&
(q = ch.find(h, k, kc)) != null) ||
((ch = p.right) != null &&
(q = ch.find(h, k, kc)) != null))
return q;
}
dir = tieBreakOrder(k, pk);
}

有两种情况:h小于phh大于ph。通常,代码 (pk = p.key) == k || (k != null && k.equals(pk)) 表示 h 等于 ph,但我不知道为什么还有 else if 在那之后.

当两个对象的hashCode 相等,但是==euqlas() 会得到false 是什么情况?

当Object的类重写equals()方法时会导致这种情况吗?但我曾经听说重写 equals() 也必须重写 hashCode(),所以这个问题不会发生。

我希望有人能告诉我哪种情况会导致第三种else if

最佳答案

What is the situation when two objects's hashCode is equals to each other, but == and equals() will get false?

根据 Java 文档:

  • 如果对象相等(即 x.equals(y) == true ),则 hashCode这些对象的也应该相等(即 x.hashCode() == y.hashCode() )
  • 如果两个对象相等hashCode (即 x.hashCode() == y.hashCode() ),那么这些对象并不强制相等(即 x.equals(y) == true/false )

详见 Oracle Java Tutorial: Object as a Superclass

关于java - 为什么key的hashcode有大于等于小于等于三种情况,为什么会出现其他情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54265589/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com