我想知道NSSet
如何确保它只有唯一的对象?当我们尝试添加重复值时,那么它在哪个条件上决定它已经具有此值?我想知道潜在的唯一性标准。
答案 0 :(得分:5)
NSSet
使用对象的isEqual:
方法实现来确定对象相等性。它还使用hash
使查找更快。
-(BOOL)isEqual:(id)other;
-(NSUInteger)hash;
当两个对象相等时,它们的hash
方法必须返回相同的值(具有相同hash
的对象,但是,它们可能不一定彼此相等)。
当您的hash
和isEqual:
为implemented properly时,NSSet
可以通过仅检查hash
“与”{1}}“碰撞”的少数几个对象来决定相等性您要添加到集合中的对象的hash
。
答案 1 :(得分:1)
在官方苹果文档中查看Object Comparison。如您所见,大多数容器使用hash
来比较对象。
答案 2 :(得分:0)
我想知道NSSet如何确保它只有唯一的对象
每当您尝试添加对象时,它都会检查其中所有其他现有对象的哈希值。基于此,它将保持独特
如果两个对象相等,则它们必须具有相同的哈希值
当我们尝试添加重复值时,会根据哪个条件确定它已经具有此值?
如果新对象哈希值与现有哈希值匹配,那么它将被视为dublicate
Refer this Apple's documentation
答案 3 :(得分:0)
首先,设置检查对象的hash
值。如果散列不相等,则意味着保证对象不同。如果哈希值相等,则并不表示对象必须相等,因此集合必须确保并检查其isEqual:
方法