我如何理解这句话“具有相同哈希值的两个实例不一定相等。”

Posted

技术标签:

【中文标题】我如何理解这句话“具有相同哈希值的两个实例不一定相等。”【英文标题】:How can I comprehend this sentence "two instances with the same hash value don’t necessarily compare equally. " 【发布时间】:2019-03-25 08:52:20 【问题描述】:

当我阅读《Advanced Swift》一书和“Hashable Requirement”一章时,我被这个解释弄糊涂了

两个相等的实例(由您的 == 实现定义)必须具有相同的哈希值。反之则不然:具有相同哈希值的两个实例不一定比较相等。

我如何理解“相反”的情况,或者为什么具有相同哈希值的两个实例不一定相等。

【问题讨论】:

示例:有无限多的字符串,但只有 2^64 个可能的哈希值 ... 【参考方案1】:

将哈希值视为给定对象实例的快速紧凑非唯一标识符。唯一的硬条件是:如果两个对象比较相等,根据== 运算符,两个实例必须具有完全相同的哈希值。这就是它的全部;)

特别是,考虑到哈希值不是唯一的——如何给它们Int有限的范围? — 我们不能安全地假设具有相同哈希值的两个实例将进行相等的比较。

【讨论】:

以上是关于我如何理解这句话“具有相同哈希值的两个实例不一定相等。”的主要内容,如果未能解决你的问题,请参考以下文章

面试题:如何理解“UNIX里一切都是文件”这句话?

正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话

如何理解 JMS 中的“同步”和“异步”消息传递?

如何理解“子类不能降低父类中定义的方法的可访问性”这句话?

关于递归的初级理解

谁能给我解释一下这句话的意思 SCRIPT_HOME=$(dirname $(readlink -f $0))