2012-12-20 38 views
11

如果堆棧擴展矢量是否意味着堆棧同步?從矢量Java文檔堆棧擴展矢量

不同的是新的集合實現

注意,Vector是同步的。

回答

12

是的,它是同步的,但根據Javadocs你應該更喜歡Deque而不是Stack

Stack Javadocs

的更完整和一致的組LIFO堆棧操作的是由雙端隊列接口和其實施方式中,這應該在 優先使用該類提供 。例如:

Deque<Integer> stack = new ArrayDeque<Integer>();

+1

如有疑問[請查看代碼](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Stack.java )(* openjdk only;)) – soulcheck

+0

爲什麼不使用LinkedList? ArrayDeque是Deque的實現,但Vector是List –

3

是的,從矢量繼承的方法保持在堆棧同步。自己的堆棧方法peek,pop,search在Stack中同步。 Stack.push和Stack.empty方法是不同步的,但

public boolean empty() { 
    return size() == 0; 
} 

public E push(E item) { 
    addElement(item); 
    return item; 
} 

這兩種方法都調用因此Vector的同步方法Stack.empty和Stack.push是線程安全的。

+0

+1的實現。我認爲這是正確的。我不認爲擴展向量使自己的棧同步。這是如何定義方法的。 – kosa

+0

對,它不是一個類可以同步,但它的方法 –