JDK 1.8 ArrayList源码分析 关键代码

/**
* 1. ArrayList AbstractList中实现了List接口 冗余,作者已经承认
* 2. RandomAccess 可以随机访问,标记接口
*
**/
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
        //默认的长度大小
 private static final int DEFAULT_CAPACITY = 10;
 //数组的数据
 // transient 序列化会忽略,? 序列化的时候使用的element,writeObject的时候会重新复制。节省空间
 transient Object[] elementData;
    /**
     * 集合的大小
     */
    private int size;
     /**
     *  新的长度是旧的长度2倍
     *   * 扩容
     */
        private void grow(int minCapacity) {
        //旧的长度=元素的长度
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
         //将旧数组的内容放到新数组中
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

}
posted @ 2023-01-18 15:33  李悠然  阅读(18)  评论(0编辑  收藏  举报