哈希表

作者: 半路和尚怎么出家 | 来源:发表于2018-11-23 13:39 被阅读0次

在讲哈希表之前,先来看一道leetcode上的题目:


题目

这道题可以简单地用map来解决,但是利用数组会让整个解题步骤更加简洁


利用数组解题

看了上面的问题,那么来说一下什么是哈希表

什么是哈希表
哈希表会遇到的问题(哈希函数的设计及哈希冲突的解决)
  • 哈希函数的设计


    函数设计
    取模的问题(假如取模1000000,则取模以后就是身份证后六位,而倒数第五和第六位是生日的月份,值可能在01-31之间变化,这样的话,取模后会导致数据分布的季度不均匀)
    对一个大整数,模一个素数是比较合适的
    哈希函数设计的原则
  • java中的hashCode
    java的Object类带了hashcode方法,java库中的基本类型的包装类都实现了hashCode方法,我们自建的类如果想利用hashset或者hashmap存储时,最好也重写一下hashcode方法


    equals方法重写的套路,框内
  • hash冲突及其解决方案


    hash表本质是一个数组,我们的元素要存入这样一个数组中 需要用该元素的hashcode值对数组长度取模,获得一个索引,该元素存入相应的索引位置,当不同元素对数组长度取模后获得相同的索引,则在同一个所以索引位置生成一个链表(其他可用作查询的结构均可),将元素挂接即可,这就是hash冲突的解决
  • hash表的时间复杂度分析


    分析
    动态扩容后的复杂度分析
  • hash冲突的其他解决方式
    • 链地址法
    • 二次hash
    • 平凡探测法
    • 线性探测
      其实一般情况下,我们用链地址法已经足够满足我们所遇到的使用场景

相关文章

  • 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/lfbfqqtx.html