美文网首页
isEqual与hash

isEqual与hash

作者: 8fe8946fa366 | 来源:发表于2018-04-15 22:03 被阅读13次

说实话我原来根本不知道还有这样一个问题!😖

1.isEqual和==有什么区别 

==判断两个对象是否相等就是在判断两个对象的内存地址是否相等,内存地址不等就认为这两个对象不想等。

isEqual则不同,它判断两个对象是否想等不仅仅是判断内存地址,就算内存地址不同两个对象也可能被判为相等。

🙋🌰:

    UIColor* color1 = [UIColor colorWithCGColor:[UIColor redColor].CGColor];

    UIColor* color2 = [UIColor colorWithCGColor:[UIColor redColor].CGColor];

    NSLog(@"%p",color1);

    NSLog(@"%p",color2);

    if (color1 == color2) {

        NSLog(@"==");不会打印

    }

    if ([color1 isEqual:color2]) {

        NSLog(@"isEqual");会打印

    }

2.hashcode

NSSet和NSDictionary都是机遇hash table实现的,在这两个集合类里判断成员是否相等的时候为了提高速度,先判断hash值是否想等,如果hash值不等那么直接认为两个成员是不想等的。hash值(hashcode)相等的成员存储在一个subCollection里面,hash值相等的情况下在这个subCollection里面根据isEqual的规则去判断两个成员是否相等。

所以,如果两个对象相同,则 hashCode 一定相同;反之,hashCode 相同的两个对象,并不一定是相同的对象。如果所有对象的 hashCode 都相同,那么每次比较都会调用 equal 方法,整个查询效率会变得很低。

相关文章

  • hash与isEqual对象过滤

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

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

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

  • isEqual与hash

    说实话我原来根本不知道还有这样一个问题!? 1.isEqual和==有什么区别 ==判断两个对象是否相等就是在判断...

  • iOS补充知识

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

  • iOS 对象判断相等

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

  • iOS isEqual与hash!

    详情:https://www.jianshu.com/p/915356e280fc ==运算符只是简单地判断是否是...

  • iOS 从源码来探讨 isEqual 和 hash

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

  • 面试准备第三篇

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

  • isEqual & hash

    闲话少说,先说本编博客的核心 iOS系统API给我们提供一个自动过滤重复元素的容器 NSMutableSet...

  • hash和isEqual

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

网友评论

      本文标题:isEqual与hash

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