ArrayDeque的堆栈和同步装饰器之间的区别

问题描述

我想要具有LIFO效果,并且希望它可以同步。有谁知道我应该使用这两种实现中的哪一种?谷歌搜索了一段时间,仍然没有好的答案。

最重要的是:有什么区别,为什么要一个一个地使用,为什么要偏爱arraydequeue?

解决方法

来自问题:

为什么说偏爱arrayDequeue?

据说不是{em> em 喜欢ArrayDeque(一个班级)。

据说您应该Deque(一个接口)胜过Stack(一个类),因为您应该program to an interface,从而可以替代实现,而无需更改您的代码。

“据说...” 就在Stack的javadoc中:

Deque接口及其实现提供了

一套更完整一致的LIFO堆栈操作集,应优先使用此类。

Java运行时库为Deque提供了以下实现选择:

LinkedBlockingDeque使用锁,这与使用synthronized类似,但是没有其他人使用synchronized。已证明ConcurrentLinkedDeque被实现为线程安全的方法比使用synchronized的实现具有更好的性能。 ArrayDequeStack更快,因为它没有使用synchronized,因此对于非线程安全的代码更好。


另请参见:Why should I use Deque over Stack?
另请参阅:Why is Java Vector (and Stack) class considered obsolete or deprecated?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...