字典大致实现原理
2017-11-22 16:25
274 查看
一、NSDictionary使用原理
1.NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的,hash函数设计的好坏影响着数据的查找访问效率。
- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
2.Objective-C 中的字典 NSDictionary 底层其实是一个哈希表,实际上绝大多数语言中字典都通过哈希表实现,
二、哈希的原理
哈希概念:哈希表的本质是一个数组,数组中每一个元素称为一个箱子(bin),箱子中存放的是键值对。
三、哈希表的存储过程
1. 根据 key 计算出它的哈希值 h。
2. 假设箱子的个数为 n,那么这个键值对应该放在第 (h
% n) 个箱子中。
3. 如果该箱子中已经有了键值对,就使用开放寻址法或者拉链法解决冲突。
在使用拉链法解决哈希冲突时,每个箱子其实是一个链表,属于同一个箱子的所有键值对都会排列在链表中。
1.NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的,hash函数设计的好坏影响着数据的查找访问效率。
- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;
2.Objective-C 中的字典 NSDictionary 底层其实是一个哈希表,实际上绝大多数语言中字典都通过哈希表实现,
二、哈希的原理
哈希概念:哈希表的本质是一个数组,数组中每一个元素称为一个箱子(bin),箱子中存放的是键值对。
三、哈希表的存储过程
1. 根据 key 计算出它的哈希值 h。
2. 假设箱子的个数为 n,那么这个键值对应该放在第 (h
% n) 个箱子中。
3. 如果该箱子中已经有了键值对,就使用开放寻址法或者拉链法解决冲突。
在使用拉链法解决哈希冲突时,每个箱子其实是一个链表,属于同一个箱子的所有键值对都会排列在链表中。
相关文章推荐
- Spring源码学习之:模拟实现BeanFactory,从而说明IOC容器的大致原理
- URLDecoder.decode(String str,String charSet)的大致实现原理
- 商户网站使用第三方支付的大致原理和实现
- Python字典对象实现原理
- URL编码 百分号编码和解码 URLEncoder和URLDecoder的大致实现原理
- URL编码 百分号编码和解码 URLEncoder和URLDecoder的大致实现原理
- lucene字典实现原理
- iOS NSDictionary(字典)~实现原理
- Redis源码阅读笔记(2)——字典(Map)实现原理
- Python字典对象实现原理
- python的整数字符串列表字典对象的实现原理
- 简谈 JavaScript、Java 中链式方法调用大致实现原理
- 【Redis】初探dict字典原理的实现(二)
- lucene字典实现原理
- URL编码 百分号编码和解码 URLEncoder和URLDecoder的大致实现原理
- Lucene字典的实现原理
- lucene字典实现原理——FST
- URL编码 百分号编码和解码 URLEncoder和URLDecoder的大致实现原理
- Redis实现原理(2)--字典
- lucene字典实现原理