confuse point

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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:July、wuliming、pkuoliver 说明:本文分为三部分内容,第一部分为一道百度面试题Top K...
    cyj_ya阅读 855评论 0 0
  • 说明:该系列博客整理自《算法导论(原书第二版)》,但更偏重于实用,所以晦涩偏理论的内容未整理,请见谅。另外本人能力...
    黑夜0411阅读 1,485评论 0 2
  • 项目处理 1、介绍一下实习的项目,任务分工做了哪些工作?介绍实习内容? 2、项目里面的数据存储都用了哪些?知道iO...
    奇异之兵阅读 1,557评论 0 4
  • 关于我的仓库 这篇文章是我为面试准备的学习总结中的一篇 我将准备面试中找到的所有学习资料,写的Demo,写的博客都...
    太阳骑士索拉尔阅读 1,456评论 0 11
  • 1 散列表 散列表的英文叫“Hash Table”,我们平时也叫它“哈希表”或者“Hash 表”,散列表用的就是数...
    贪睡的企鹅阅读 1,514评论 0 1