Vector源码解析
半塘 2023/11/26 Java集合框架
# 1、Vector详解说明
这里不再解释Vector过多的源码,因为Vector的源码实现上跟ArrayList类似,想了解可以去自己去查看。这里只做个总结说明:
- synchronized
Vector是线程安全的,Vector提供的方法都加上了synchronized关键字,性能上比ArrayList差一点,因为多了一个锁。
源码
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
public synchronized E get(int index) {
if (index >= elementCount)
throw new ArrayIndexOutOfBoundsException(index);
return elementData(index);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 扩容机制
Vector的扩容最小扩容为原来的2倍。
源码
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
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);
}
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
public Vector() {
this(10);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 2、Vector和ArrayList的区别
- Vector是线程安全的,ArrayList是非线程安全的。因此ArrayList效率比Vector高。
- Vector自动扩容最小是原来的2倍,而ArrayList是原来的1.5倍。