2012-12-20 64 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

对,它不是一个类可以同步,但它的方法 –