java-为什么键的哈希码具有大于或小于或等于三种情况的其他情况?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-为什么键的哈希码具有大于或小于或等于三种情况的其他情况?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1269字,纯文字阅读大概需要2分钟。
内容图文
![java-为什么键的哈希码具有大于或小于或等于三种情况的其他情况?](/upload/InfoBanner/zyjiaocheng/670/8c1c1e52881041ebb98b221e377d3f1b.jpg)
在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小于ph,h大于ph.
通常,代码(pk = p.key)== k || (k!= null&& k.equals(pk))表示h等于ph,但我不知道为什么之后还存在其他内容.
当两个对象的hashCode彼此相等,但==和euqlas()会为假时,情况如何?
当Object的类重写equals()方法会导致这种情况吗?但是我曾经听说,覆盖equals()也必须覆盖hashCode(),所以这个问题不会发生.
我希望有人能告诉我哪种情况会导致其他情况.
解决方法:
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-为什么键的哈希码具有大于或小于或等于三种情况的其他情况?全部内容,希望文章能够帮你解决java-为什么键的哈希码具有大于或小于或等于三种情况的其他情况?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。