Vector源码
1.同步
它的實現(xiàn)與ArrayList 類似,但是使用了synchronized 進行同步。
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); }2.?與 ArrayList 的比較
Vector 是同步的,因此開銷就比 ArrayList 要大,訪問速度更慢。
最好使用ArrayList 而不是 Vector,因為同步操作完全可以由程序員自己來控制;
Vector 每次擴容請求其大小的 2 倍空間,而 ArrayList 是 1.5 倍。
3. 替代方案
可以使用 Collections.synchronizedList(); 得到一個線程安全的 ArrayList。
List<String> list = new ArrayList<>(); List<String> synList = Collections.synchronizedList(list);也可以使用 concurrent 并發(fā)包下的 CopyOnWriteArrayList 類。
List<String> list = new CopyOnWriteArrayList<>();?
總結
- 上一篇: CopyOnWriteArrayList
- 下一篇: WeekHashMap