zoukankan      html  css  js  c++  java
  • Java 集合类型之ArrayList 源码解析

    层次结构

    顶层层次结构

      ArrayList实际上是继承了AbstractList,同事实现了List,RandomAccess,Clonable,Serializable序列化接口。

    AbstractList

      AbstractList抽象类继承了AbstractCollection并实现了List接口,其中AbstractCollection实现了Collection接口。

    ArrayList源码分析

    属性

    1 private static final int DEFAULT_CAPACITY = 10; //默认容量
     private static final Object[] EMPTY_ELEMENTDATA = {}; //共享空数组实例为空的实例们使用。
    //为默认的空实例准备的共享的空数组实例。我们区别于EMPTY_ELEMENTDATA以辨别膨胀多少当第一个元素被添加的时候。
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
    //这个数组缓冲区进入数组的元素被存储。
    //数组的容积是数组缓冲区的长度。
    //任何空的数组带数组元素等于DEFAULTCAPACITY_EMPTY_ELEMENTDATA会被展开到DEFAULT_CAPACITY当数组当中第一个元素被添加进去。
    transient Object[] elementData;//非私有被简化嵌套类的访问
    private int size;//数组的大小(有多少元素它包含)

    方法

    //构造一个空的ArrayList带10的初始化长度。
    public ArrayList() {
            this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
        }
    /*
      构造一个list包含集合选择的一些元素,在这个队列当中,它们被集合的迭代器返回。  
    param c 这个集合谁的元素被放入list当中
    throws NullPointerException 如果指定的集合为空
    */
        public ArrayList(Collection<? extends E> c) {
            elementData = c.toArray();
            if ((size = elementData.length) != 0) {
                // c.toArray(错误的)不返回数组对象。
                // (see e.g. https://bugs.openjdk.java.net/browse/JDK-6260652)
                if (elementData.getClass() != Object[].class)
                    elementData = Arrays.copyOf(elementData, size, Object[].class);
            } else {
                //被替代为空数组
                this.elementData = EMPTY_ELEMENTDATA;
            }
        }
  • 相关阅读:
    STM32时钟配置方法详解
    STM32 入门之 GPIO
    arm可以干什么
    四两拨千斤,ARM是如何运作、靠什么赚钱的
    ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57
    ARM与单片机到底有啥区别
    实得打印机色带芯更换
    IE浏览器不能上传图片
    IE FANS
    win8,win10里面内置的IE浏览器网银无法输入密码
  • 原文地址:https://www.cnblogs.com/kmsfan/p/12698028.html
Copyright © 2011-2022 走看看