- Vector线程安全,数据存储方式为数组
- 举例说明
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);
}
}
- Vector vector =newVector();
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