我想有 LIFO 效果,我希望它是同步的。有谁知道我应该使用这两种实现中的哪一种?谷歌搜索了一段时间,仍然没有好的答案。
底线:有什么区别,为什么使用一个而不是另一个,为什么说它偏爱arrayDequeue?
我想有 LIFO 效果,我希望它是同步的。有谁知道我应该使用这两种实现中的哪一种?谷歌搜索了一段时间,仍然没有好的答案。
底线:有什么区别,为什么使用一个而不是另一个,为什么说它偏爱arrayDequeue?
从问题:
为什么说有利于arrayDequeue?
不是说偏爱ArrayDeque
(一类)。
据说你应该更喜欢Deque
(一个接口)而不是Stack
(一个类),因为你应该编程到一个接口,允许你替换实现而不改变你的代码。
“据说……”就在以下的 javadoc 中Stack
:
接口及其实现提供了一组更完整和一致的 LIFO 堆栈操作
Deque
,应优先使用此类。
Java 运行时库为 a 提供了以下实现选择Deque
:
ArrayDeque
- 通常单线程使用的最佳选择ConcurrentLinkedDeque
- 通常是多线程使用的最佳选择LinkedBlockingDeque
- 如果您需要有大小限制的堆栈LinkedList
- 如果堆栈可以变大,并且您想在它缩小时回收空间LinkedBlockingDeque
使用锁,与 using 类似synthronized
,但其他都不使用synchronized
。这种ConcurrentLinkedDeque
实现线程安全的方式已被证明比使用synchronized
. ArrayDeque
比Stack
不使用更快synchronized
,因此对于非线程安全代码更好。
另请参阅:为什么我应该使用 Deque 而不是 Stack?
另请参阅:为什么 Java Vector(和 Stack)类被认为已过时或不推荐使用?