美文网首页
hash和isEqual

hash和isEqual

作者: AlwaysBlue | 来源:发表于2022-06-23 18:10 被阅读0次

场景:在一次数组过滤删除时,代码逻辑删除了一个对象,但是删完一个对象后,数组元素的个数少了两个,经调试发现,减少的两个对象地址还不同,但是内容完全一样(百度地图搜索地址返回了相同的地址,我们在外面包了一层,但是并没有重写isEqual函数),使用的删除对象函数是removeObject:obj。原来removeObject函数,系统会根据isEqual函数来判断是否是同一个对象,也就是说是系统自己判断出是相同的元素。为解决该问题,把所有的removeObject函数的调用改为removeObjectAtIndex函数。

1.hash函数只在元素放入NSMutableSet和NSSet,以及元素在NSDictionary中当作key时会被调用。
2.hash相同,并不代表是相同的元素,系统还会继续判断isEqual是否返回yes。
3.如果hash和isEqual都相同才会被认为是相同的元素,在set中如果三个相同的元素存入,最后只会存入一个元素。

:如果我们在重写的函数里直接返回[super hash]; 即使值不相同,也会走到isEqual,如果isEqual判断出时相同的,就会被认为是相同的元素。不知道是什么原因。感觉如果真要重写hash函数,还是自己写,不要调用[super hash].

正确的hash: return [self.name hash] ^ [self.birthday hash];

hash的一些经典使用:
1.找出两个文件中的重复元素:两个文件中的内容都转入放到hashTable中,每个元素我们遍历时做一下计数即可。>1的时重复元素,值最大的是出现次数最多的元素


参考:https://www.jianshu.com/p/d9e15b01a2b3

相关文章

  • iOS中isEqual和Hash的笔记(一)

    iOS中isEqual和Hash的笔记(一) iOS中isEqual和Hash的笔记(一)

  • hash和isEqual

    场景:在一次数组过滤删除时,代码逻辑删除了一个对象,但是删完一个对象后,数组元素的个数少了两个,经调试发现,减少的...

  • hash与isEqual对象过滤

    参考:isEqual & hash参考:iOS开发 之 不要告诉我你真的懂isEqual与hash! 如何判断对象...

  • iOS 对象判断相等

    == isEqual 重写isEqual 为什么需要重写对象的hash值 参考

  • iOS 从源码来探讨 isEqual 和 hash

    iOS 从源码来探讨 isEqual 和 hash 系统 isEqual 实现原理 先看一段代码 打印001,可以...

  • 面试准备第三篇

    1.实现isEqual和hash方法时要注意什么? |hash 对关键属性的hash值进行位或运算作为hash值 ...

  • 相等性

    当你要实现相等性的时候记住这个约定:你需要同时实现isEqual 和 hash方法。如果两个对象是被isEqual...

  • 对象相等性isEqual

    当你要实现相等性的时候记住这个约定:你需要同时实现isEqual 和 hash方法。如果两个对象是被isEqual...

  • [iOS]isEqual和hash方法的理解备忘

    记录对isEqual和hash方法理解很深的一篇文章:原文链接

  • iOS补充知识

    1、Hash方法与isEqual 1.1、== 运算符判断对象内存地址是否相同 1.2、isequal判断对象是否...

网友评论

      本文标题:hash和isEqual

      本文链接:https://www.haomeiwen.com/subject/tyzyvrtx.html