美文网首页
散列表-OC方法缓存

散列表-OC方法缓存

作者: 有毒的程序猿 | 来源:发表于2019-03-03 16:34 被阅读0次

    1、散列表

    • 散列表(Hash table,也叫哈希表), 是根据关键码值(Key value)而直接进行访问的数据结构. 也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表.

    2、OC方法缓存

    • oc的方法缓存结构如下图:


      缓存结构体.jpg
    散列表.jpeg

    3、OC散列表原理

    • 首先生成一个空的数组如下图:
    空的散列表.jpg
    • 存取数据
    比如我们有一个方法
    - (void)cacheMethd {
    }
    
    key = @selector(cacheMethd) // 方法名
    _mask                                          //  常量
    index = @selector(cacheMethd) & _mask;
    算出来比如说index = 2
    存取数据都是通过算出数组下标  来存储或者获取数据
    
    image.png
    • 哈希冲突
    // 存数据
    如果index = @selector(cacheMethd) & _mask;
    算出来的index已经存在数据
    
    while(bucket[index]) {
           index --;
           if(index < 0) {
                index = 数组count - 1;
            }
    }
    
    // 取数据
    算出index = @selector(cacheMethd) & _mask;
    取出bucket_t
    
    对比key是否相等
    相等直接返回
    不等
    while(bucket[index]) {
           index --;
           if(index < 0) {
                index = 数组count - 1;
            }
    }
    继续判读
    
    

    相关文章

      网友评论

          本文标题:散列表-OC方法缓存

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