美文网首页
confuse point

confuse point

作者: reboot_q | 来源:发表于2020-04-27 10:56 被阅读0次

    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。

    相关文章

      网友评论

          本文标题:confuse point

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