加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

ArrayList的源码解析

发布时间:2020-12-15 07:58:48 所属栏目:Java 来源:网络整理
导读:ArrayList的源码查看--基于jdk1.8的源码,个人理解,如果理解不对的地方,请指出,谢谢!! ? 变量 ? 构造方法(3个) private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this .elementData = DEFAULTCAPACITY_EMP

ArrayList的源码查看--基于jdk1.8的源码,个人理解,如果理解不对的地方,请指出,谢谢!!

?

变量

?

构造方法(3个)

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

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

?

    private static final Object[] EMPTY_ELEMENTDATA = {};

    public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }

?

transient Object[] elementData; // non-private to simplify nested class access

private static final Object[] EMPTY_ELEMENTDATA = {};

public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        if ((size = elementData.length) != 0) {
            // c.toArray might (incorrectly) not return Object[] (see 6260652)
            if (elementData.getClass() != Object[].class)
                elementData = Arrays.copyOf(elementData,size,Object[].class);
        } else {
            // replace with empty array.
            this.elementData = EMPTY_ELEMENTDATA;
        }
}

?

其他方法

?

    /**  
     * ArrayList的容量就是该数组的长度.
     */
    transient Object[] elementData; // non-private to simplify nested class access

    /**
     *  一个空数组.
     */
    private static final Object[] EMPTY_ELEMENTDATA = {};

    /**
     * Trims the capacity of this <tt>ArrayList</tt> instance to be the list‘s
     * current size. An application can use this operation to minimize the
     * storage of an <tt>ArrayList</tt> instance.
     * 
     * 将数组缓冲区大小调整到实际ArrayList存储元素的大小,即 elementData = Arrays.copyOf(elementData,size);
     */
    public void trimToSize() {
        modCount++;
        // 当实际大小 < 数组缓冲区大小时
        // 如调用默认构造函数后,刚添加一个元素,此时elementData.length=10,而size=1
        // 通过这一步,可以使得空间得到有效利用,而不会出现资源浪费的情况。
        if (size < elementData.length) {
            elementData = (size == 0) ? EMPTY_ELEMENTDATA : Arrays.copyOf(elementData,size);
        }
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读