2020-04-28

2020-04-28  本文已影响0人  opensesame

一、继承关系

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);
}
}

上一篇 下一篇

猜你喜欢

热点阅读