isEqual与hash

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

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 方法,整个查询效率会变得很低。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容