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); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
热点阅读