(注意:本文基于JDK1.8)
前言
上一篇大概了解一下LinkedHashMap的特点,每次使用LinkedHashMap,都需要先创建LinkedHashMap对象,让我们学习一下创建LinkedHashMap对象有什么特别之处?
创建LinkedHashMap对象的五个构造方法,接下来一起分析一下……加油
LinkedHashMap()构造方法分析
public LinkedHashMap() {
super();
accessOrder = false;
}
用于创建LinkedHashMap对象的构造方法,往往无参数的构造方法都是最常用的
1、调用基类的无参数的构造方法
LinkedHashMap的父类是HashMap,先调用父类的无参数的构造方法
2、选择元素遍历方式为:按照元素插入顺序
LinkedHashMap对象持有的实例变量accessOrder表示遍历元素的顺序,false值表示当对LinkedHashMap的元素进行遍历时,按照元素插入顺序对元素进行遍历
LinkedHashMap(int)构造方法分析
public LinkedHashMap(int initialCapacity) {
super(initialCapacity);
accessOrder = false;
}
传入的参数initialCapacity表示初始化LinkedHashMap对象(父类HashMap)持有的数组对象的容量大小
1、调用父类的一个参数的构造方法
将传入的数组容量,传入到父类的一个参数的构造方法中
2、选择元素遍历方式为:按照元素插入顺序
LinkedHashMap对象持有的实例变量accessOrder表示遍历元素的顺序,false值表示当对LinkedHashMap的元素进行遍历时,按照元素插入顺序对元素进行遍历
LinkedHashMap(int,float)构造方法分析
public LinkedHashMap(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
accessOrder = false;
}
传入的参数initialCapacity表示初始化LinkedHashMap对象(父类HashMap)持有的数组对象的容量大小,传入另外一个参数loadFactor表示扩充数组容量时的负载因子,数组容量*负载因子=扩容阈值。这个负载因子的唯一作用是用于计算数组需要扩容时的阈值
1、将数组容量与加载因子交给父类处理
父类HashMap的两个参数构造方法会被调用
2、选择元素遍历方式为:按照元素插入顺序
LinkedHashMap对象持有的实例变量accessOrder表示遍历元素的顺序,false值表示当对LinkedHashMap的元素进行遍历时,按照元素插入顺序对元素进行遍历
LinkedHashMap(int,float,boolean)构造方法分析
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
}
可传入3个参数,第一个参数用于初始化数组容量、第二个参数用于初始化负载因子、第三个参数用于初始化遍历元素的方式,这是LinkedHashMap唯一可以改变遍历元素顺序的构造方法(如果你有需求)
1、将数组容量与加载因子交给父类处理
父类HashMap的两个参数构造方法会被调用
2、保存元素遍历的方式
LinkedHashMap对象持有的实例变量accessOrder表示遍历元素的顺序,此处将传入的局部变量accessOrder交给实例变量保存,标志位accessOrder,true表示遍历元素的元素按照元素访问的先后顺序进行,false表示遍历元素的顺序按照元素插入的顺序
LinkedHashMap(Map)
public LinkedHashMap(Map<? extends K, ? extends V> m) {
super();
accessOrder = false;
putMapEntries(m, false);
}
创建对象时,存储另一个Map中的多个元素,传入的参数m表示一个Map对象,该Map对象持有着多个元素(包括0个)
1、调用父类构造方法
2、初始化遍历元素的顺序为false,即按照元素插入的顺序对元素进行遍历
3、将传入的Map对象中持有的所有元素添加到当前LinkedHashMap对象中
使用putMapEntries()方法添加多个元素
总结
1、根据你自己的需求选择不同的构造方法创建LinkedHashMap对象
2、如果你没有什么要求,使用默认无参数的构造方法创建LinkedHashMap对象即可
3、如果你需要抛弃默认的数组容量(父类HashMap默认初始化的数组对象,容量为16),即可使用可以指定初始化容量的构造方法
4、如果你需要改变遍历元素的方式,那就使用可以指定accessOrder值的构造方法吧
5、如果你需要创建LinkedHashMap对象时,同时添加多个元素进来,那就选择包含Map参数的构造方法吧……
6、如果你还想改变负载因子的Map,那就……
根据需求使用不同的构造方法……这就是LinkedHashMap,一个继承于HashMap,可以指定遍历元素顺序的Map!