Ios NSSet如何确保it对象的唯一性?
我想知道如何Ios NSSet如何确保it对象的唯一性?,ios,nsset,Ios,Nsset,我想知道如何NSSet确保它只有唯一的对象?当我们尝试添加重复值时,它根据哪些标准确定它已经具有该值?我想知道基本的唯一性标准 NSSet使用对象的isEqual:方法的实现来确定对象的相等性。它还使用hash来加快查找速度 -(BOOL)isEqual:(id)other; -(NSUInteger)hash; 当两个对象相等时,它们的hash方法必须返回相同的值(但是,具有相同hash的对象不一定彼此相等) 当您的hash和isEqual:是相等的时,NSSet可以通过只检查其hash发生
NSSet
确保它只有唯一的对象?当我们尝试添加重复值时,它根据哪些标准确定它已经具有该值?我想知道基本的唯一性标准 NSSet
使用对象的isEqual:
方法的实现来确定对象的相等性。它还使用hash
来加快查找速度
-(BOOL)isEqual:(id)other;
-(NSUInteger)hash;
当两个对象相等时,它们的hash
方法必须返回相同的值(但是,具有相同hash
的对象不一定彼此相等)
当您的
hash
和isEqual:
是相等的时,NSSet
可以通过只检查其hash
发生冲突的少数对象来确定相等性使用要添加到集合中的对象的散列
。NSSet
使用对象的isEqual:
方法的实现来确定对象的相等性。它还使用hash
来加快查找速度
-(BOOL)isEqual:(id)other;
-(NSUInteger)hash;
当两个对象相等时,它们的hash
方法必须返回相同的值(但是,具有相同hash
的对象不一定彼此相等)
当您的
hash
和isEqual:
相等时,NSSet
可以通过只检查其hash
与要添加到集合中的对象的hash
发生“碰撞”的少数对象来确定相等性。请查看苹果的官方文档。如您所见,大多数容器都使用散列
来比较对象。请查看apple官方文档。如您所见,大多数容器都使用散列来比较对象。我想知道NSSet如何确保它只有唯一的对象。
无论何时尝试添加对象,它都会检查其中所有其他现有对象的哈希值。基于此,它将保持其独特性
如果两个对象相等,则它们必须具有相同的哈希值
当我们尝试添加重复值时,它根据哪些标准确定它已经具有该值?
如果新对象哈希值与现有哈希值匹配,则将其视为dublicate
我想知道NSSet如何确保它只有唯一的对象
无论何时尝试添加对象,它都会检查其中所有其他现有对象的哈希值。基于此,它将保持其独特性
如果两个对象相等,则它们必须具有相同的哈希值
当我们尝试添加重复值时,它根据哪些标准确定它已经具有该值?
如果新对象哈希值与现有哈希值匹配,则将其视为dublicate
首先,集合检查对象的值。如果散列数不相等,则意味着保证对象不同。但是,如果散列相等,并不意味着对象必须相等,因此集合必须确保并检查它们的相等:
方法首先集合检查对象的散列值。如果散列数不相等,则意味着保证对象不同。如果散列相等,但这并不意味着对象必须相等,因此集合必须确保并检查它们的isEqual:
方法,因此您的答案是:NSSet将其所有对象与新插入的对象进行比较,以查看它是否已经存在?@Basheer\u CAD请重新阅读我的答案,尤其是最后一部分,我说的是根据散列值检查少数对象。所以你的答案是:NSSet将其所有对象与新插入的对象进行比较,看看它是否已经存在?@Basheer_CAD请重新阅读我的答案,特别是最后一部分,我说的是根据散列值检查少数对象。