Vector的实现
与ArrayList的实现类似,但是使用了synchronized进行同步。 ArrayList的实现
1
2
3
4
5
6
7
8
9
10
11
12
13public 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);
}
与ArrayList的比较
- Vector是同步的,因此开销就比ArrayList要大,访问速度更慢。最好使用ArrayList,因为同步操作完全可以由程序员自己控制。
- Vector每次扩容请求其大小的2倍空间,而ArrayList是1.5倍。
替代方案
可以使用 Collections.synchronizedList();得到一i个线程安全的ArrayList
1
2List<String> list = new ArrayList<>();
List<String> synList = Collections.synchronizedList(list);也可以使用concurrent并发包下的CopyOnWriteArrayList类
1
List<String> list = new CopyOnWriteArrayList<>();