问题描述
我想要具有LIFO效果,并且希望它可以同步。有谁知道我应该使用这两种实现中的哪一种?谷歌搜索了一段时间,仍然没有好的答案。
最重要的是:有什么区别,为什么要一个接一个地使用,为什么要偏爱arraydequeue?
解决方法
来自问题:
为什么说偏爱arrayDequeue?
据说不是{em> em 喜欢ArrayDeque
(一个班级)。
据说您应该Deque
(一个接口)胜过Stack
(一个类),因为您应该program to an interface,从而可以替代实现,而无需更改您的代码。
“据说...” 就在Stack
的javadoc中:
Deque
接口及其实现提供了一套更完整且一致的LIFO堆栈操作集,应优先使用此类。
Java运行时库为Deque
提供了以下实现选择:
-
ArrayDeque
-通常是单线程使用的最佳选择 -
ConcurrentLinkedDeque
-通常是多线程使用的最佳选择 -
LinkedBlockingDeque
-如果您需要大小限制的堆栈 -
LinkedList
-如果堆栈可以变大,并且您想在收缩时回收空间
LinkedBlockingDeque
使用锁,这与使用synthronized
类似,但是没有其他人使用synchronized
。已证明ConcurrentLinkedDeque
被实现为线程安全的方法比使用synchronized
的实现具有更好的性能。 ArrayDeque
比Stack
更快,因为它没有使用synchronized
,因此对于非线程安全的代码更好。
另请参见:Why should I use Deque over Stack?
另请参阅:Why is Java Vector (and Stack) class considered obsolete or deprecated?