@@ -68,23 +68,25 @@ public class ArrayList<E> extends AbstractList<E>
68
68
private int size;
69
69
70
70
/**
71
- * 带初始容量参数的构造函数。(用户自己指定容量 )
71
+ * 带初始容量参数的构造函数(用户可以在创建ArrayList对象时自己指定集合的初始大小 )
72
72
*/
73
73
public ArrayList (int initialCapacity ) {
74
74
if (initialCapacity > 0 ) {
75
- // 创建initialCapacity大小的数组
75
+ // 如果传入的参数大于0, 创建initialCapacity大小的数组
76
76
this . elementData = new Object [initialCapacity];
77
77
} else if (initialCapacity == 0 ) {
78
- // 创建空数组
78
+ // 如果传入的参数等于0, 创建空数组
79
79
this . elementData = EMPTY_ELEMENTDATA ;
80
80
} else {
81
+ // 其他情况,抛出异常
81
82
throw new IllegalArgumentException (" Illegal Capacity: " +
82
83
initialCapacity);
83
84
}
84
85
}
85
86
86
87
/**
87
- *默认构造函数,DEFAULTCAPACITY_EMPTY_ELEMENTDATA 为0.初始化为10,也就是说初始其实是空数组 当添加第一个元素的时候数组容量才变成10
88
+ *默认无参构造函数
89
+ *DEFAULTCAPACITY_EMPTY_ELEMENTDATA 为0.初始化为10,也就是说初始其实是空数组 当添加第一个元素的时候数组容量才变成10
88
90
*/
89
91
public ArrayList () {
90
92
this . elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA ;
@@ -94,16 +96,16 @@ public class ArrayList<E> extends AbstractList<E>
94
96
* 构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
95
97
*/
96
98
public ArrayList (Collection<? extends E > c ) {
97
- //
99
+ // 将指定集合转换为数组
98
100
elementData = c. toArray();
99
- // 如果指定集合元素个数不为0
101
+ // 如果elementData数组的长度不为0
100
102
if ((size = elementData. length) != 0 ) {
101
- // c.toArray 可能返回的不是Object类型的数组所以加上下面的语句用于判断,
102
- // 这里用到了反射里面的getClass()方法
103
+ // 如果elementData不是Object类型数据(c.toArray可能返回的不是Object类型的数组所以加上下面的语句用于判断)
103
104
if (elementData. getClass() != Object []. class)
105
+ // 将原来不是Object类型的elementData数组的内容,赋值给新的Object类型的elementData数组
104
106
elementData = Arrays . copyOf(elementData, size, Object []. class);
105
107
} else {
106
- // 用空数组代替
108
+ // 其他情况, 用空数组代替
107
109
this . elementData = EMPTY_ELEMENTDATA ;
108
110
}
109
111
}
@@ -127,21 +129,22 @@ public class ArrayList<E> extends AbstractList<E>
127
129
* @param minCapacity 所需的最小容量
128
130
*/
129
131
public void ensureCapacity (int minCapacity ) {
132
+ // 如果是true,minExpand的值为0,如果是false,minExpand的值为10
130
133
int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA )
131
134
// any size if not default element table
132
135
? 0
133
136
// larger than default for default empty table. It's already
134
137
// supposed to be at default size.
135
138
: DEFAULT_CAPACITY ;
136
-
139
+ // 如果最小容量大于已有的最大容量
137
140
if (minCapacity > minExpand) {
138
141
ensureExplicitCapacity(minCapacity);
139
142
}
140
143
}
141
144
// 得到最小扩容量
142
145
private void ensureCapacityInternal (int minCapacity ) {
143
146
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA ) {
144
- // 获取默认的容量和传入参数的较大值
147
+ // 获取“默认的容量”和“传入参数”两者之间的最大值
145
148
minCapacity = Math . max(DEFAULT_CAPACITY , minCapacity);
146
149
}
147
150
0 commit comments