20 | 散列表(下):为什么散列表和链表经常会一起使用?

114 阅读1分钟

LRU缓存淘汰算法

  • LRU的实现

    • 利用链表保存元素的访问顺序
    • 头部为长期未访问数据,尾部是采访问数据
    • 更新位置时,需要遍历链表o(n)
  • 优化:散列表可以将LRU淘汰算法时间复杂度降低到O(1)

    • 需要增加一个指针,指向LRU的next节点

\

Redis有序集合

  • 如果使用hash表,就不支持范围查询了

Java LinkedHashMap

  • 基本概念:在hashmap的基础上增加了link

    • 散列表的基础上,将插入顺序通过链串联起来
  • 可以完美支持LRU算法

总结

  • 为什么需要散列表+链表

    • 散列表支持高效的插入,删除和插入,但是元素时无序的
    • 通过引入链表,可以保证散列表元素的有序性

\