Java容器類研究6:Vector

java.util.Vectorjava

Vector與ArrayList的異同

相同點:隨機存取,可經過位置序號直接獲取數據。都是經過一個數組來存放元素。數組

不一樣點:Vector是線程安全的,方法有synchronized關鍵字修飾。安全

Vector容量增加策略

Vector默認的增加策略是每次在原容量的基礎上x2。併發

Vector的ListIterator怎麼作到線程安全的

Vector實現了本身的iterator,爲了保證併發線程安全的共享一個Vector,開發者在next等方法中也加入了synchronized。this

public E next() {
            synchronized (Vector.this) {
                checkForComodification();
                int i = cursor;
                if (i >= elementCount)
                    throw new NoSuchElementException();
                cursor = i + 1;
                return elementData(lastRet = i);
            }
    }

這裏synchronized修飾的是Vector.this對象自己,而不是iterator本身,這樣多個線程使用iterator操做Vector時,就能夠保證線程的安全。線程

Vector與ArrayList實現的Spliterator相似

惟一的區別就是在使用本身的Vector時,加上了synchronized關鍵字。code

Stack與Vector

Stack類繼承自Vector,stack的實現不止一種方式,好比LinkedList。java中在Vector基礎上實現了一個Stack。實現的想法也很簡單,就是在數組的末尾push和pop。對象

相關文章
相關標籤/搜索