美文网首页
NSDictionary的实现原理

NSDictionary的实现原理

作者: 54番茄 | 来源:发表于2017-10-20 10:27 被阅读83次

iOS中NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的, hash函数设计的好坏影响着数据的查找访问效率。数据在hash表中分布的越均匀,其访问效率越高(深入理解哈希表)。而在Objective-C中,通常都是利用NSString 来作为键值,其内部使用的hash函数也是通过使用 NSString对象作为键值来保证数据的各个节点在hash表中均匀分布。

- (void)setObject:(ObjectType)anObject forKey:(KeyType<NSCopying> )aKey;

从上面这个方法可以看出,NSDictionary在存储数据时,akey必须遵循NSCopyingx协议的,也就是在NSDictionary内部,会对akey对象copy新的一份。既然知道了作为akey 值,必须遵循 NSCopying 协议,说明除了 NSString 对象之外,我们还可以使用其他类型对象来作为 NSDictionary akey值。不过这还不够,作为 akey 值,该类型还必须继承于 NSObject 并且要重载一下两个方法:

- (NSUInteger)hash;

- (BOOL)isEqual:(id)object;                            

第一个hash方法,是用来计算akey对象的 hash 值,最终的 hash 值决定了该对象在 hash 表中存储的位置。所以同样,如果想重写该方法,我们尽量设计一个能让数据分布均匀的 hash 函数。

第二个isEqual 方法是为了通过 hash 值来找到 akey对象 在hash �表中的位置。

注意:在调用 setObject: forKey:  后,内部会去调用 � key 对象的 hash 方法确定 object 在hash表内的入口位置,然后会调用 isEqual 来确定该值是否已经存在于 NSDictionary中。

























                                                                        

相关文章

  • NSDictionary底层实现原理

    3.NSDictionary底层实现原理 笔者自语:当有一个面试官问我NSDictionary底层实现原理,我平时...

  • NSDictionary实现原理

    NSDictionary是基于key - value 方式,把key映射到一个hash表中实现的 key 需要支持...

  • NSDictionary实现原理

    NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的, hash函数设计的...

  • NSDictionary实现原理

    字典原理 NSDictionary(字典)是使用hash表来实现key和value之间的映射和存储的 方法:- (...

  • NSDictionary实现原理

    NSDictionary介绍 NSDictionary(字典)是使用 hash表来实现key和value之间的映射...

  • NSDictionary实现原理

    字典原理 NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的, hash...

  • iOS 字典的实现原理

    一、NSDictionary使用原理 1.NSDictionary(字典)是使用hash表来实现key和value...

  • hash表原理

    一、NSDictionary使用原理 1.NSDictionary(字典)是使用hash表来实现key和value...

  • iOS 字典的实现原理

    一、NSDictionary使用原理1.NSDictionary(字典)是使用hash表来实现key和value之...

  • NSDictionary的实现原理

    NSDictionary 、NSSArray、NSSet NSSArray 用于对象有序集合(NSObject对象...

网友评论

      本文标题:NSDictionary的实现原理

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