- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Apple 的文档说如果我覆盖 isEqual:
那么我必须覆盖 hash
以确保哈希值对于被认为相等的两个对象应该相同等于:
然后我阅读了关于哈希的文档,下面是其中的一部分:
Therefore, either the hash method must not rely on any of the object’s internal state information or you must make sure the object’s internal state information does not change while the object is in the collection.
我的自定义类 MyClass 有几个成员,它们是 int 和 bool 以及包含 MyClass 数量的 NSArray,如果所有成员都相等,我希望 MyClass 的两个实例相等。
我对如何覆盖 isEqual:
没有问题,但对于 hash
。根据我的理解,hash
应该通过异或或旋转移位等位运算将成员的哈希值组合起来计算哈希值。
问题是如何实现 hash
来满足上面提到的 Apple 的要求。文档说哈希值不应该依赖于内部状态(即成员),但我发现我必须使用它们来计算值。
或者我真的需要实现它吗?因为我确定我不会将此类用作 NSDictionary 的键,这是我知道 hash
在哪里使用的唯一方法。是否还有其他使用 hash
的地方,我应该关心它?
最佳答案
有两个选择 - 要么不依赖内部状态,要么确保当对象在集合中时内部状态不会改变。
第二个选项将允许您依赖内部状态来生成散列,但是您的对象在集合中时必须是不可变的,以便更改它不会更改其散列。
Cocoa 中的集合依赖于对象的散列来执行方法,例如 containsObject:
。
如果您的对象实现了一个依赖于其内部状态的散列,将其插入到集合中然后更改,则其散列将更改,并且集合将失去对对象的跟踪。
关于iphone - 我真的必须重写哈希只是因为我重写了 isEqual : for my subclass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179124/
考虑以下代码 OCMockObject *mock = [OCMockObject mockForClass:[NSObject class]]; [[[mock expect] andReturnV
我正在尝试使用 .isEqual 比较两个对象来自 lodash-node 包的方法。即使对象相同,.isEqual返回 false . var _ = require('lodash-node');
LocalDate在 Java 中有两个类似的方法 equals和 isEqual . 它们之间有什么区别?当他们输出不同的结果时? 最佳答案 LocalDate.equals ,像大多数其他人一样
此函数检查两个对象是否具有相同的值: _.isEqual = (a, b) => { const aKeys = Object.getOwnPropertyNames(a) const bKe
const car = new Map([['100','200']]); const bike = new Map([['200','100']]); _.isEqual(car,bike); //
我正在尝试比较两种颜色,但无法得到正确的结果: 这是我的代码: NSLog(@"selfColor = %@",selfColor); NSLog(@"left = %@",left); NSLog(
背景 我有一个由第 3 方库提供的方法,它返回一个 CLBeacons 数组。 - (void)beaconManager:(ESTBeaconManager *)manager didR
Apple 的文档说如果我覆盖 isEqual: 那么我必须覆盖 hash 以确保哈希值对于被认为相等的两个对象应该相同等于: 然后我阅读了关于哈希的文档,下面是其中的一部分: Therefore,
我有一个类叫 Contact; 在Contact中我有(要测试的简单版本,还没有散列) - (BOOL)isEqual:(id)other { if (other == self)
本文整理了Java中java.time.ZonedDateTime.isEqual()方法的一些代码示例,展示了ZonedDateTime.isEqual()的具体用法。这些代码示例主要来源于Gith
我看到 Julia 有 3 种不同的方式 做平等。 == , === , 和 isequal 我应该使用哪个,何时使用? 最佳答案 ===是内在的平等。 在原语上,它是值相等:如果它们具有相同的位级表
在类中定义的方法在其他类中调用时不会被识别为函数。 文件:模型/book.model.ts export class Book { constructor(public title: stri
在类中定义的方法在其他类中调用时不会被识别为函数。 文件:模型/book.model.ts export class Book { constructor(public title: stri
我有一个使用下划线 isEqual 来比较两个 JSON 字符串的问题。目前我在主干中做了一个应用程序,我正在使用 _.isEqual(savedModel.toJSON(),changedModel
我有一个类,我用它来传递带有文本标签的选择器: @interface TableLink : NSObject @property (nonatomic, strong) NSString* name
我有一个烦人的问题,我试图解决它,但它只是没有发生,所以要么我错过了一些愚蠢的东西,要么我做错了。 基本上 id 喜欢检查一个字符串,如果它是 no,则加载空白字符串,如果还有其他内容,则加载真正的字
最近我一直在研究 java8 的新特性,以便更好地理解它们。 当尝试使用 Stream.filter 进行一些操作时,我发现了 Predicate.java 的源代码,在其中我发现了以下 isEqua
我有一个重写 isEqual 方法的人员类: #import "People.h" @implementation People @synthesize name = _name; -(BOOL)is
喜欢 class A :NSObject { let a :Int let b :UIColor } 我不想通过一一比较所有属性来实现 isEqual。如果那样,当我添加另一个属性时,
我有两个自定义 NSManagedObject 类:Notes 和 Tags。 当我覆盖 Tags 类中的 isEqual: 函数时,我收到如下错误消息: 'Class 'Tags' for enti
我是一名优秀的程序员,十分优秀!