哈希表

作者: 王琦森 | 来源:发表于2019-06-20 21:43 被阅读0次

哈希表数据结构

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;

相关文章

  • Java数据结构_哈希表_基本概念

    本文目标 哈希表的基本概念,哈希冲突,哈希函数 什么是哈希表 哈希表也叫做散列表(hash有剁碎的意思)哈希表是空...

  • redis数据结构--字典

    Redis的字典底层就是哈希表。 哈希表 首先给出哈希表的定义: 其中可以看到,table是一个哈希表节点的数组,...

  • 哈希表和链表

    优秀文章:Chapter: 散列表(哈希表) 一、哈希表 哈希表hashtable(key,value) 就是把K...

  • 算法-哈希表算法总结

    1 哈希表模拟 思路:通过设计哈希表,模拟O(1)时间复杂度的哈希表。 2 数组作为哈希表 思路:数组就是简单的哈...

  • 数据结构 -- 哈希表及其应用

    这篇主要用来记录一下学习到的关于哈希表的知识点。 文章结构 哈希表 哈希表的定义 哈希表的优缺点 哈希碰撞 负载因...

  • 数据结构与算法(第一季):哈希表(Hash Table)

    一、哈希表(Hash Table) 1、概念 哈希表也叫做散列表。 哈希表的原理: 利用哈希函数生成key对应的i...

  • 深入理解哈希表

    深入理解哈希表 深入理解哈希表

  • 2019 算法面试相关(leetcode)--哈希表

    哈希表相关的原理可以参考下:浅谈哈希表(HashTable)深入理解哈希表哈希表的理解理解HashSet及使用 哈...

  • Redis中的字典

    Redis中的字典 Redis中的字典使用哈希表作为底层实现,一个哈希表中可以有多个哈希表结点,而每个哈希表结点保...

  • Redis数据结构与对象——哈希

    1 字典的实现 Redis的字典使用哈希表作为底层实现,一个哈希表可以有多个哈希表节点,即每个哈希表节点就保存了字...

网友评论

      本文标题:哈希表

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