NSSet如何确保它的唯一性对象?

时间:2014-05-14 10:46:15

标签: ios nsset

我想知道NSSet如何确保它只有唯一的对象?当我们尝试添加重复值时,那么它在哪个条件上决定它已经具有此值?我想知道潜在的唯一性标准。

4 个答案:

答案 0 :(得分:5)

NSSet使用对象的isEqual:方法实现来确定对象相等性。它还使用hash使查找更快。

-(BOOL)isEqual:(id)other;
-(NSUInteger)hash;

当两个对象相等时,它们的hash方法必须返回相同的值(具有相同hash的对象,但是,它们可能不一定彼此相等)。

当您的hashisEqual:implemented properly时,NSSet可以通过仅检查hash“与”{1}}“碰撞”的少数几个对象来决定相等性您要添加到集合中的对象的hash

答案 1 :(得分:1)

在官方苹果文档中查看Object Comparison。如您所见,大多数容器使用hash来比较对象。

答案 2 :(得分:0)

我想知道NSSet如何确保它只有唯一的对象

每当您尝试添加对象时,它都会检查其中所有其他现有对象的哈希值。基于此,它将保持独特

如果两个对象相等,则它们必须具有相同的哈希值

当我们尝试添加重复值时,会根据哪个条件确定它已经具有此值?

如果新对象哈希值与现有哈希值匹配,那么它将被视为dublicate

Refer this Apple's documentation

enter image description here

答案 3 :(得分:0)

首先,设置检查对象的hash值。如果散列不相等,则意味着保证对象不同。如果哈希值相等,则并不表示对象必须相等,因此集合必须确保并检查其isEqual:方法