美文网首页
iOS NSDictionary 原理

iOS NSDictionary 原理

作者: iOS坚持者 | 来源:发表于2019-06-14 00:00 被阅读0次

    文中只是我查询资料进行的一次总结。又不懂的可以私信我,或者查询原文。

    NSDictionary 其实就是一个 hash 表。

    哈希表通俗来讲就是一个链表,每个节点的下标是将对象地址通过哈希函数转换而来的,而这个节点的值就是一个数组。

    而通过哈希函数得到的下标(hash 值)可能会造成冲突,所以会将 hash 值一样的对象存储到链表节点里面的数组中;NSObject 的 hash 函数是把对象的内存地址值作为 hash 值。

    通过 hash 表来查找数据,会比数组高效很多,hash 表查询的时间复杂度为 O(1),而数组通过 for 循环查询的时间复杂度为 O(n)。

    字典和数组一样,当存储对象时,都会将对象强引用一次。

    当字典将对象作为 key 时,会先去执行对象的 hash 方法,从而得到hash 值,然后将对象深 copy 一次,和 value 一起存储在字典中。这也是为什么对象作为字典的 key 时,需要实现NSCopying 协议的原因。

    - dic[key1]作为key去字典中查询value时,也会先计算hash值,来确定在hash表中的存储下标位置

    - 因为存储散列碰撞的可能,所以找到下标后,会调用isEqual方法来匹配链表上面的各个元素之间的key值。当isEqual:返回YES时,会把对应的value返回。

    -  调用父类的isEqual,NSObject的- (BOOL)isEqual:(id)object比较的是内存地址。

    hsah 表详解

    iOS 字典原理

    相关文章

      网友评论

          本文标题:iOS NSDictionary 原理

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