我想有 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)类被认为已过时或不推荐使用?