【问题标题】:Difference between Stack and synchronization decorator for ArrayDequeArrayDeque 的 Stack 和同步装饰器之间的区别
【发布时间】:2020-12-10 08:50:40
【问题描述】:

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

底线:有什么区别,为什么要使用一个而不是另一个,为什么说有利于arrayDequeue?

【问题讨论】:

标签: java stack arraydeque lifo


【解决方案1】:

来自问题:

为什么说偏爱arrayDequeue?

据说偏爱ArrayDeque(一个类)。

据说你应该更喜欢Deque(一个接口)而不是Stack(一个类),因为你应该program to an interface,允许你替换实现而不需要改变你的代码。

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

Deque 接口及其实现提供了一组更完整一致的 LIFO 堆栈操作,应优先使用此类。

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

LinkedBlockingDeque 使用锁,类似于使用synthronized,但其他都没有使用synchronizedConcurrentLinkedDeque 被实现为线程安全的方式已被证明比使用 synchronized 的实现执行得更好。 ArrayDequeStack 快,因为它没有使用 synchronized,因此更适合非线程安全代码。


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

【讨论】:

  • 非常感谢!但是暂时忘记这一切。 ArrayDeque 的装饰器与 Stack 完全一样,是吗?性能外观的含义。他们都同步了每个操作,我明白了吗?
  • @AnaMaria 什么装饰器? Deque 没有内置装饰器。
  • 我可以发誓有 collections.synchronizedQueue,因为有 Set,Map,List.. 为什么不排队呢? ://
猜你喜欢
  • 2018-09-01
  • 2015-12-12
  • 2014-04-27
  • 1970-01-01
  • 2021-10-16
  • 2011-06-06
  • 2018-11-22
  • 1970-01-01
  • 2016-03-16
相关资源
最近更新 更多