ArrayList 定义

ArrayList 是一个用数组实现的集合,支持随机访问,元素有序且可以重复。

1 public class ArrayList<E> extends AbstractList<E>
2         implements List<E>, RandomAccess, Cloneable, java.io.Serializable
View Code

 JDK1.8源码(一)——java.util.ArrayList

 蓝色实线箭头是指Class继承关系

 绿色实线箭头是指interface继承关系

 绿色虚线箭头是指接口实现关系

 由上可知ArrayList继承AbstractList 并且实现了List和RandomAccess,Cloneable, Serializable接口。

、实现 List 接口

  List 接口定义了实现该接口的类都必须要实现的一组方法,如下所示,下面我们会对这一系列方法的实现做详细介绍。

JDK1.8源码(一)——java.util.ArrayList

 

字段属性

//集合默认大小
private static final int DEFAULT_CAPACITY = 10;
//空的数组实例
private static final Object[] EMPTY_ELEMENTDATA = {};
//这也是一个空的数组实例,和EMPTY_ELEMENTDATA空数组相比是用于了解添加元素时数组膨胀多少
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//存储 ArrayList集合的元素,集合的长度即这个数组的长度
//1、当 elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA 时将会清空 ArrayList
//2、当添加第一个元素时,elementData 长度会扩展为 DEFAULT_CAPACITY=10
//3、transient修饰表示序列化对象的时候,这个属性就不会序列化到指定的目的地中;通过方法来手动序列化,下面讲解
transient Object[] elementData; 
//表示集合的长度
private int size;
View Code

 

构造函数

①、无参构造函数

public ArrayList() {
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
View Code

  此无参构造函数将创建一个 DEFAULTCAPACITY_EMPTY_ELEMENTDATA 声明的数组,注意此时初始容量是0,而不是大家以为的 10。

  注意:根据默认构造函数创建的集合,ArrayList list = new ArrayList();此时集合长度是0.

②、给定大小有参构造函数

 1     public ArrayList(int initialCapacity) {
 2         if (initialCapacity > 0) {
 3             this.elementData = new Object[initialCapacity];
 4         } else if (initialCapacity == 0) {
 5             this.elementData = EMPTY_ELEMENTDATA;
 6         } else {
 7             throw new IllegalArgumentException("Illegal Capacity: "+
 8                                                initialCapacity);
 9         }
10     }
View Code

相关文章:

  • 2021-09-13
  • 2021-08-14
  • 2021-06-08
  • 2021-09-11
  • 2021-07-01
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-01
  • 2021-10-14
  • 2021-11-22
  • 2021-07-17
  • 2022-12-23
  • 2021-11-12
  • 2021-09-10
相关资源
相似解决方案