一、继承关系
arrayList继承自抽象类abstractList,并且实现了四个接口,分别是List,RandomAccess,Cloneable,Serializable。其余三个不专门列出来说明了,单独记下RandomAccess,可以参考这个文章的讲述:https://juejin.im/post/5a26134af265da43085de060
二、属性
1、
private static final int DEFAULT_CAPACITY = 10; //默认初始化容量
private static final Object[] EMPTY_ELEMENTDATA = {}; //一个object对象的空数组
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};//和上一个属性暂时看不出来有什么明显的区别,后面再进行区分
transient Object[] elementData; //transient修饰确保该属性不会被序列化,首次列表创建的时候是为空的,只有第一次调用add方法增加元素的时候才会初始化容量为10
直接使用new ArrayList的时候,实质是:
elmentData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
扩容的方法是私有的,grow(int minCapacity),扩容原理:
private Object[] grow(int minCapacity) {
int oldCapacity = elementData.length;
if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
int newCapacity = ArraysSupport.newLength(oldCapacity,minCapacity-oldCapacity,oldCapccity>1);
}
}
网友评论