Vector底层源码分析
- 定义说明:
public class Vector extends AbstractList
implements List, RandomAccess, Cloneable,java.io.Serializable- 底层也是动态数组 protected Object[] elementData;
- Vector它是线程同步的,Vector操作的方法带有sychronized
- 在开发中,需要线程同步的时候使用Vector(多线程环境)
package vector底层源码分析;
import java.util.Vector;
/**
* test
*
* @author: huanghao
* @createTime: 2022/05/04 23:33
* @description: vector 底层源码
*/
@SuppressWarnings({"all"})
public class VectorSource {
public static void main(String[] args) {
//无参构造
Vector vector = new Vector();
// Vector vector = new Vector(8);
for (int i = 0; i < 10; i++) {
vector.add(i);
}
vector.add(100);
System.out.println(vector);
/*
1. new Vector(); 底层
public Vector() {
this(10);
}
//有参构造 Vector vector = new Vector(8);
//走的方法是:
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
2.vector.add(i)
2.1 下面这个方法执行添加数据到vector集合
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
2.2 判断是否需要扩容 条件:minCapacity - elementData.length > 0
private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
2.3 如果需要的数组大小不够用 就扩容,扩容的算法
//就是扩容两倍
// int newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
*/
}
}