前言:
在上一篇博客中,我们系统的介绍了HashMap,HashMap是非线程安全的类,一般情况下作为局部变量使用是完全可以的。
HashMap的存放是无序的,按照一定的规则映射的,所以,遍历其元素的顺序与添加的顺序是不一致的。
如果我们想按照添加的顺序来遍历元素该如何做呢?
那就需要使用本次介绍的LinkedHashMap来完成了。
注意:由于LinkedHashMap大量使用了HashMap的方法,所以不太明白HashMap工作原理的同学,可以先看下笔者另一篇关于HashMap的文章,https://blog.csdn.net/qq_26323323/article/details/86219905
1.LinkedHashMap结构分析public class LinkedHashMap
extends HashMap
implements Map{
// 双端链表的头元素
transient LinkedHashMap.Entry head;
// 双端链表的尾元素
transient LinkedHashMap.Entry tail;
// 默认为false,指的是添加顺序;
// 当指定为true时,访问顺序,这个在后面再详细说明
final boolean accessOrder;
// 不同于HashMap.Node
// 继承了HashMap.Node,同时还扩展了自己的属性before、after
static class Entry extends HashMap.Node {
Entry before, after;
Entry(int hash, K key, V value, Node next) {
super(hash, key, value, next);
}
}
通过对其结构的分析,可以确定,LinkedHashMap就是HashMap与LinkedList的结合体。
其继承HashMap,通过HashMap来实现基本功能;
其添加head和tail属性,并且在Entry节点中,添加before和after属性,来实现双向链表的功能。
2.LinkedHashMap构造方法
// 1.空参构造
public LinkedHashMap() {
// 直接调用new HashMap()
super();
accessOrder = false;
}
// 2.初始化数组容量
public LinkedHashMap(int initialCapacity) {
super(initialCapacity);
accessOrder = false;
}
// 3.初始化数组容量和负载因子
public LinkedHashMap(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
accessOrder = false;
}
// 4.初始化数组容量和负载因子和AccessOrder
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
}
// 5.以一个Map来初始化
public LinkedHashMap(Map
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?