Java容器类浅析三-----保证插入顺序的HashMap--LinkedHashMap的存取原理

LinkedHashMap是HashMap的子类,它通过内部的双向链表保证迭代顺序与插入顺序一致。在put()方法中,元素被添加到链表尾部,而get()方法在accessOrder为true时会更新元素到链表头部,实现访问顺序的迭代。构造函数和HashMap类似,但初始化了双向链表。
摘要由CSDN通过智能技术生成

上一节我们说到HashMap的存取原理,并一步步地分析了其主要的成员变量、构造函数以及体现其算法的put,get方法。本文将继续分析HashMap的子类—LindedHashMap,来解决上一节提到的,如何保证迭代顺序和插入顺序的一致性的问题。

一、概述

public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>

LinkedHashMap直接继承于HashMap,且其内部属性和存取算法与HashMap基本一致。
那么为什么LinkedHashMap可以做到保证迭代顺序和插入顺序一致呢? 这就要归功于LinkedHashMap中的一个数据结构—Entry header了,header是一个双向链表中的首节点,该双向链表保存了entry插入的顺序,在迭代时,实际上是在迭代该双向链表。每次调用put()方法时,第一步和HashMap的put()方法一致,第二步就是将该元素的before节点指向header的before节点,after节点指向header,将header的before节点指向该元素,以完成双向链表的记录顺序。

二、成员变量

/**
 * The head of the doubly linked list.
 */
private transient Entry<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值