@@ -68,23 +68,25 @@ public class ArrayList<E> extends AbstractList<E>
6868 private int size;
6969
7070 /**
71- * 带初始容量参数的构造函数。(用户自己指定容量 )
71+ * 带初始容量参数的构造函数(用户可以在创建ArrayList对象时自己指定集合的初始大小 )
7272 */
7373 public ArrayList (int initialCapacity ) {
7474 if (initialCapacity > 0 ) {
75- // 创建initialCapacity大小的数组
75+ // 如果传入的参数大于0, 创建initialCapacity大小的数组
7676 this . elementData = new Object [initialCapacity];
7777 } else if (initialCapacity == 0 ) {
78- // 创建空数组
78+ // 如果传入的参数等于0, 创建空数组
7979 this . elementData = EMPTY_ELEMENTDATA ;
8080 } else {
81+ // 其他情况,抛出异常
8182 throw new IllegalArgumentException (" Illegal Capacity: " +
8283 initialCapacity);
8384 }
8485 }
8586
8687 /**
87- *默认构造函数,DEFAULTCAPACITY_EMPTY_ELEMENTDATA 为0.初始化为10,也就是说初始其实是空数组 当添加第一个元素的时候数组容量才变成10
88+ *默认无参构造函数
89+ *DEFAULTCAPACITY_EMPTY_ELEMENTDATA 为0.初始化为10,也就是说初始其实是空数组 当添加第一个元素的时候数组容量才变成10
8890 */
8991 public ArrayList () {
9092 this . elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA ;
@@ -94,16 +96,16 @@ public class ArrayList<E> extends AbstractList<E>
9496 * 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
9597 */
9698 public ArrayList (Collection<? extends E > c ) {
97- //
99+ // 将指定集合转换为数组
98100 elementData = c. toArray();
99- // 如果指定集合元素个数不为0
101+ // 如果elementData数组的长度不为0
100102 if ((size = elementData. length) != 0 ) {
101- // c.toArray 可能返回的不是Object类型的数组所以加上下面的语句用于判断,
102- // 这里用到了反射里面的getClass()方法
103+ // 如果elementData不是Object类型数据(c.toArray可能返回的不是Object类型的数组所以加上下面的语句用于判断)
103104 if (elementData. getClass() != Object []. class)
105+ // 将原来不是Object类型的elementData数组的内容,赋值给新的Object类型的elementData数组
104106 elementData = Arrays . copyOf(elementData, size, Object []. class);
105107 } else {
106- // 用空数组代替
108+ // 其他情况, 用空数组代替
107109 this . elementData = EMPTY_ELEMENTDATA ;
108110 }
109111 }
@@ -127,21 +129,22 @@ public class ArrayList<E> extends AbstractList<E>
127129 * @param minCapacity 所需的最小容量
128130 */
129131 public void ensureCapacity (int minCapacity ) {
132+ // 如果是true,minExpand的值为0,如果是false,minExpand的值为10
130133 int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA )
131134 // any size if not default element table
132135 ? 0
133136 // larger than default for default empty table. It's already
134137 // supposed to be at default size.
135138 : DEFAULT_CAPACITY ;
136-
139+ // 如果最小容量大于已有的最大容量
137140 if (minCapacity > minExpand) {
138141 ensureExplicitCapacity(minCapacity);
139142 }
140143 }
141144 // 得到最小扩容量
142145 private void ensureCapacityInternal (int minCapacity ) {
143146 if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA ) {
144- // 获取默认的容量和传入参数的较大值
147+ // 获取“默认的容量”和“传入参数”两者之间的最大值
145148 minCapacity = Math . max(DEFAULT_CAPACITY , minCapacity);
146149 }
147150
0 commit comments