public class test {
public static void main(String[] args) {
//构造一个Vector对象,对象中熟组默认长度为10
Vector vector = new Vector();
//循环添加数据
for (int i= 0 ;i < 10 ; i++){
vector.add(i);
}
//打印输出
System.out.println(vector);
}
}
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//默认调用无参构造,并间接调用有参构造,为数组指定长度为10
public Vector() {
this(10);
}
}
2. vector.add(i);
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//为数组添加元素
public synchronized boolean add(E e) {
//操作记录数
modCount++;
//判断数组长度是否充足,否则扩容
ensureCapacityHelper(elementCount + 1);
//将元素赋予当前下标
elementData[elementCount++] = e;
return true;
}
}
3. ensureCapacityHelper(elementCount +1);
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
//如果当前数组所需的长度 - 当前数组的长度 > 0,则进行扩容
if (minCapacity - elementData.length > 0)
//扩容
grow(minCapacity);
}
}
4. grow(minCapacity);
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
private void grow(int minCapacity) {
// overflow-conscious code
//获取当前数组的长度
int oldCapacity = elementData.length;
/*如果容量 > 0 扩容后的长度 = 原数组长度 + capacityIncremrnt
否则 扩容后的长度 = 原数组长度 * 2
*/
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
//如果扩容后的长度 - 数组所需要的最小长度 < 0 最小长度 = 扩容后的大小
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
//如果达到最大长度
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
<span class="hljs-comment">//将原属组数据拷贝到扩容后的数组中
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
5. 回到add方法中,将元素赋予数组当前下标
//将元素赋予当前下标
elementData[elementCount++] = e;
END
原文:https://www.cnblogs.com/isclay/p/15311898.html