1. setValue:forKey
& setObject:forKey
- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;
- (void)setValue:(nullable ObjectType)value forKey:(NSString *)key;
- setObject:forKey: 是NSMutableDictionary 的方法, key 和 Object 都不能为nil
- setValue:forkey: 是KVC的方法, value可以为nil, key必须为非空字符串
2. 数据结构
-
Hash, 一般翻译为散列. 简单说就是一种将任意长度的消息压缩到某一固定长度(128位 - 16字节)的消息摘要的函数. 也可以说是数据内容和数据存放地址之间的映射关系.
-
数组的特点: 寻址容易, 插入和删除困难
-
链表: 插入和删除容易, 寻址困难
-
Hash table
-
拉链法 - 链表的数组
image.png
左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。
元素特征转变为数组下标的方法就是散列法。散列法当然不止一种,下面列出三种比较常用的:
* 直接定址法,
* 数字分析法,
* 平方取中法,
* 折叠法,
* 随机数法,
* 除留取余法
-
适用范围
快速查找,删除的基本数据结构,通常需要总数据量可以放入内存。 -
基本原理及要点
hash函数选择,针对字符串,整数,排列,具体相应的hash方法。 -
碰撞处理,一种是open hashing,也称为拉链法(链表法);另一种就是closed hashing,也称开地址法,opened addressing。
网友评论