阅读目录
从上述定义中也能看到
LinkedHashMap其实就是继承了HashMap,并加了双向链表记录顺序,代码和结构本身不难,但是其中结构的组织,代码复用这些地方十分值得我们学习;具体结构如图所示:
2. 构造函数和成员变量
public LinkedHashMap(int initialCapacity, float loadFactor) {} public LinkedHashMap(int initialCapacity) {} public LinkedHashMap() {} public LinkedHashMap(Map<? extends K, ? extends V> m) {} public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) {} /** * The iteration ordering method for this linked hash map: <tt>true</tt> * for access-order, <tt>false</tt> for insertion-order. * @serial */ final boolean accessOrder;可以看到
LinkedHashMap的5个构造函数和HashMap的作用基本是一样的,都是初始化initialCapacity和loadFactor,但是多了一个accessOrder,这也是LinkedHashMap最重要的一个成员变量了;- 当
accessOrder为true的时候,表示LinkedHashMap中记录的是访问顺序,也是就没放get一个元素的时候,这个元素就会被移到链表的尾部; - 当
accessOrder为false的时候,表示LinkedHashMap中记录的是插入顺序;
3. Entry关系

扎眼一看可能会觉得
HashMap体系的节点继承关系比较混乱;一所以这样设计因为LinkedHashMap继承至HashMap,其中的节点同样有普通节点和树节点两种;并且树节点很少使用;- 现在的设计中,树节点是可以完全复用的,但是
HashMap的树节点,会浪费双向链表的能力; - 如果不这样设计,则至少需要两条继承关系,并且需要抽出双向链表的能力,整个继承体系以及方法的复用会变得非常复杂,不利于扩展;
- 当
青岛软件培训
可能你正在寻找一家靠谱的IT培训机构,
渴望突破职业瓶颈,
找一份得体的工作。
恰巧万码学堂正在寻找像你这样不甘平凡的追光者!
我们拒绝纸上谈兵,直接参与真实开发流程!
现在行动,未来可期
立即拨打0532-85025005,预约免费职业规划咨询
前20名咨询者赠送《2025高薪技术岗位白皮书》!
你不是在报名课程,而是在投资五年后的自己!
