zoukankan      html  css  js  c++  java
  • 数据结构HashMap哈希表原理分析

    先看看定义:“散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

    哈希表本质是数组,哈希函数是把key转换成下标用的。

    几个问题:

    1.不同的key,通过哈希函数计算得到的数组下标一样了怎么办?(散列冲突)

    2.数组不够用了怎么办?(动态扩容)

    关于问题1,解决方案关键字:开放寻址法和链表法,其中链表法最常用,散列表数组的每个值存的结构体一部分是链表的地址,如果在插入时碰到哈希值(也就是数组下标)一致时,把相同元素插入到链表后边。查找时,如果哈希值相同了,则比较链表里的key,则能找到。其中有个优化,当链表超过8个时, 可以动态调整成红黑树,方便快速查找,而不至于查找时间复杂度为O(n),当链表少于8个时,动态调整成链表,方便查找更快(虽然map查找的时间复杂度是logn,但是当元素个数很少时,反而一个个比较会更快)。

    关于问题2,解决方案关键字:渐进式rehash。

  • 相关阅读:
    MySQL之PXC集群
    MySQL大表查询未走索引异常分析
    Redis场景应用之UA池
    MySQL日志剖析
    Redis场景应用之排行榜
    MySQL B+树索引解析
    Redisson分布式锁剖析
    关键字替代符号C++
    并查集按秩合并
    POJ3048
  • 原文地址:https://www.cnblogs.com/workharder/p/11775329.html
Copyright © 2011-2022 走看看