ArrayList(JDK1

:既然是源码,为什么要这样设计类,有这样的继承关系。这就要说到设计模式的问题了。所以我们要了解常用的设计模式,才能更深刻的去理解这个类。

文章目录

    • 简介
  • 继承关系图

  • 成员变量

  • 构造方法

  • 内部类

  • 核心方法

    • add()方法(有四个)
  • 对数组的容量进行调整

  • 大数据插入问题

  • remove()方法

  • get()方法

  • set()方法

  • indexOf()方法

  • contains()方法

  • toArray()方法

  • System.arraycopy()和 Arrays.copyOf()方法

    • System.arraycopy()方法
  • Arrays.copyOf()方法

  • 两者联系与区别

简介


ArrayList 是 Java 集合框架中 List 接口的一个实现类。底层是数组,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。

ArrayListVector的翻版,区别在于ArrayList是线程不安全的,而Vector则是线程安全的。但是Vector是一个较老的集合,具有很多缺点,不建议使用,这里我们就不对其进行分析了。

ArrayList 可以说是我们使用最多的 List 集合,它有以下特点:

  • 它是基于数组实现的List类

  • 可以动态地调整容量

  • 有序的(元素输出顺序与输入顺序一致)

  • 元素可以为 null

  • 不同步,非线程安全,效率高

  • 查询快,增删慢

  • 占用空间更小,对比 LinkedList,不用占用额外空间维护链表结构

ArrayList 为什么有这些优点呢?我们通过源码来分析分析。在阅读源码前先来看看ArrayList继承关系。

继承关系图


ArrayList继承关系图

可以看到,ArrayListAbstractList的子类,同时实现了List接口。除此之外,它还实现了三个标识型接口,这几个接口都没有任何方法,仅作为标识表示实现类具备某项功能。RandomAccess表示实现类支持快速随机访问,Cloneable表示实现类支持克隆,具体表现为重写了clone方法,java.io.Serializable则表示支持序列化,如果需要对此过程自定义,可以重写writeObjectreadObject方法。

成员变量


// 序列号

private static final long serialVersionUID = 8683452581122892189L;

// 数组初始容量为 10

private static final int DEFAULT_CAPACITY = 10;

// 空对象数组

private static final Object[] EMPTY_ELEMENTDATA = {};

// 缺省空对象数组

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

// 底层数据结构,数组

transient Object[] elementData;

// 数组元素个数,默认为0

private int size;

// 最大数组容量

private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

构造方法


//默认构造方法,初始为空数组。

//只有插入一条数据后才会扩展为10,而实际上默认是空的

public ArrayList() {

this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;

}

//根据指定容量创建对象数组

public ArrayList(int initialCapacity) {

if (initialCapacity > 0) {

//创建initialCapacity大小的数组

this.elementData = new Object[initialCapacity];

} else if (initialCapacity == 0) {

//创建空数组

this.elementData = EMPTY_ELEMENTDATA;

} else {

throw new IllegalArgumentException("Illegal Capacity: "+

initialCapacity);

}

}

/**

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值