Lil*_*ard 12 hash cocoa cocoa-touch objective-c
-hash当一个可变对象存储在一个集合中时,它的文档说不能改变,类似地-isEqual:说,-hash对于相同的对象,值的文档必须相同.
鉴于此,是否有人对最佳实施方式有任何建议-hash,使其满足这两个条件但实际上是智能计算的(即不仅仅是返回0)?有谁知道框架提供的类的可变版本如何做到这一点?
最简单的事情当然是忘记第一个条件(关于它不会改变),并确保我不会在一个集合中偶然改变一个对象,但我想知道是否有任何更灵活的解决方案.
编辑:我想知道在我改变对象的内部状态时是否可以维护2个契约(其中相等的对象具有相等的哈希值,并且当对象在集合中时哈希值不会改变).我倾向于说"不",除非我做了一些愚蠢的事情,总是为哈希返回0,但这就是我问这个问题的原因.
有趣的问题,但我认为你想要的在逻辑上是不可能的。假设您从 2 个对象 A 和 B 开始。它们都是不同的,并且以不同的哈希码开始。您将两者添加到某个哈希表中。现在,您想要改变 A,但您无法更改哈希码,因为它已经在表中。但是,可以通过 .equals() B 的方式更改 A。
在这种情况下,你有 2 个选择,但都不起作用:
在我看来,如果不使用常量作为哈希码,就不可能做到这一点。
| 归档时间: |
|
| 查看次数: |
2226 次 |
| 最近记录: |