zoukankan      html  css  js  c++  java
  • linkhashmap实现原理

    HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap。由于LinkedHashMap是HashMap的子类,所以LinkedHashMap自然会拥有HashMap的所有特性。比如,LinkedHashMap的元素存取过程基本与HashMap基本类似,只是在细节实现上稍有不同。当然,这是由LinkedHashMap本身的特性所决定的,因为它额外维护了一个双向链表用于保持迭代顺序。此外,LinkedHashMap可以很好的支持LRU算法,笔者在第七节便在LinkedHashMap的基础上实现了一个能够很好支持LRU的结构。

    不过遗憾的是,HashMap是无序的,也就是说,迭代HashMap所得到的元素顺序并不是它们最初放置到HashMap的顺序。HashMap的这一缺点往往会造成诸多不便,因为在有些场景中,我们确需要用到一个可以保持插入顺序的Map。庆幸的是,JDK为我们解决了这个问题,它为HashMap提供了一个子类 —— LinkedHashMap。虽然LinkedHashMap增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序可以是插入顺序,也可以是访问顺序。因此,根据链表中元素的顺序可以将LinkedHashMap分为:保持插入顺序的LinkedHashMap 和 保持访问顺序的LinkedHashMap,其中LinkedHashMap的默认实现是按插入顺序排序的。

  • 相关阅读:
    新增模块--性能调测问题荟萃
    SSDB(网络LevelDB)-- 实际遇到的问题
    内存池--定长内存池
    分布式系统
    Tcp Ip -- tcpdump win窗口大小
    GCC手册学习(序)
    GNU--gprof使用总结
    几种TCP连接中出现RST的情况(转载)
    Tcp/Ip--正常情况下的三次握手,四次挥手
    关于cnblogs的排版
  • 原文地址:https://www.cnblogs.com/panxuejun/p/8760658.html
Copyright © 2011-2022 走看看