哈希表

哈希表数据结构

typedef struct dictht{
  // 哈希表数组
  dictEntry **table; 
  // 哈希表大小
  unsigned long size; 
  //  哈希表大小掩码
  unsigned long sizemask;
  // 该哈希表已有节点的数量
  unsigned long used;
};
  sizemask=size-1

哈希表节点数据结构

typedef struct dictEntry{
// 键
  void *key;
// 值
  union{
    void *val;
    uint64_t u64;
    int64_t s64;
  }v;
  // 指向下个哈希节点,形成链表
  struct dictEntry *next;
};

key属性保存着键值对中的键,而v属性保存着键值对中的值。


image.png

Redis的字典使用哈希表作为底层实现。

字典数据结构

typedef struct dict{
  // 类型特定函数
  dictType *type;
  // 私有数据
  void *privateData;
  // 哈希表
  dictht ht[2];
  // rehash索引
  // 当rehash不在进行时,值为-1
  int rehashidx;
};
image.png

hash算法

# 使用字典设置的哈希函数,计算键 key 的哈希值
hash = dict->type->hashFunction(key);

# 使用哈希表的 sizemask 属性和哈希值,计算出索引值
# 根据情况不同, ht[x] 可以是 ht[0] 或者 ht[1]
index = hash & dict->ht[x].sizemask;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 有两个字典,分别存有 100 条数据和 10000 条数据,如果用一个不存在的 key 去查找数据,在哪个字典中速...
    和风细羽阅读 6,953评论 0 5
  • 这篇文章由一个简单的问题引出: 有两个字典,分别存有 100 条数据和 10000 条数据,如果用一个不存在的 k...
    多喝水JS阅读 3,728评论 0 11
  • 麻省理工学院公开课:算法导论。B站地址,网易公开课也有对应的资源。https://www.bilibili.com...
    LuLuX阅读 5,927评论 0 3
  • 首次接触张小娴,就有了相见恨晚的感觉,我选择了她的成名小说《面包树上的女人》,这是部中篇小说,是我喜欢...
    陕北一姐阅读 4,071评论 0 1
  • 时间过得飞快,我进入新公司已过了一个多月了,今天利用午休的时间把这一个月的工作和生活好好总结下。 工作上我不足的地...
    聂红进阅读 3,462评论 0 0

友情链接更多精彩内容