M S*_*ach 1 java collections hashcode
等于对象必须具有相同的哈希码.根据我的理解,当我们打算在基于哈希的数据集中使用对象时,此语句是有效的.这是java docs中hashcode和equals方法的合同之一.我探究了为什么这样说并查看了哈希表的实现,并在put方法中找到了下面的代码
if ((e.hash == hash) && e.key.equals(key))
Run Code Online (Sandbox Code Playgroud)
所以我明白了,合同来自e.hash == hash上面的条件.我进一步尝试探讨为什么java在比较两个对象是否相等时检查哈希码.所以这是我的理解
如果两个相等的对象具有相同的hascodes,则它们可以存储在同一个存储桶中,这在仅在单个存储桶中查找方面会很好
最好检查hashcode然后实际调用equals方法,因为hascode方法比equals方法成本更低,因为这里我们只需比较int值,其中equals方法可能是对象字段比较.所以hashcode方法提供了一个额外的过滤器.
如果以上两个原因都有效,请纠正我?
| 归档时间: |
|
| 查看次数: |
3022 次 |
| 最近记录: |