Java之LinkedHashMap源码分析(第二篇:创建对象)

(注意:本文基于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!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值