为什么要在堆栈上使用Deque?

极客 :

Stack我的用例需要一个数据结构。我应该能够将项目推送到数据结构中,而我只想从堆栈中检索最后一个项目。堆栈的JavaDoc说:

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

Deque<Integer> stack = new ArrayDeque<>();

我绝对不希望这里出现同步行为,因为我将使用方法本地的数据结构。除了这个,我为什么还要DequeStack这里呢?

PS:Deque的Javadoc说:

双端队列也可以用作LIFO(后进先出)堆栈。此接口应优先于旧版Stack类使用。

乔恩·斯基特(Jon Skeet):

一方面,在继承方面更明智。在我看来Stack扩展的事实Vector真的很奇怪。在Java的早期,继承被IMO过度使用-这Properties是另一个例子。

对我而言,您引用的文档中的关键词是一致的Deque公开了一组操作,这些操作都与从集合的开头或结尾获取,添加/删除项,进行迭代等有关-仅此而已。故意没有办法按位置访问元素,这是因为它是的子类Stack暴露出来Vector

哦,而且也Stack没有接口,因此,如果您知道需要Stack操作,最终将提交到特定的具体类,这通常不是一个好主意。

也如注释中指出的那样,StackDeque具有反向迭代顺序:

Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(new ArrayList<>(stack)); // prints 1, 2, 3


Deque<Integer> deque = new ArrayDeque<>();
deque.push(1);
deque.push(2);
deque.push(3);
System.out.println(new ArrayList<>(deque)); // prints 3, 2, 1

JavaDocs for Deque.iterator()也对此进行了说明

以适当的顺序返回此双端队列中的元素的迭代器。元素将按照从头(头)到后(尾)的顺序返回。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在pbuilder上使用sbuild?

来自分类Dev

为什么要在memset上使用bzero?

来自分类Dev

为什么要在Dict上使用HashDict?

来自分类Dev

什么是gvfs,为什么要在我的系统上使用它?

来自分类Dev

为什么要在void上使用int函数?

来自分类Dev

为什么要在ThreadLocal上使用数据插槽?

来自分类Java

为什么要在Java / Spring上使用Scala / Lift?

来自分类Javascript

为什么要在object.freeze上使用immutablejs?

来自分类Dev

为什么要在 [Align] 对齐上使用 [Expanded] / [Flexible] flex?

来自分类Dev

sudoedit:为什么要在sudo vi上使用它?

来自分类Dev

为什么要在诸如Postgres的RDBMS上使用Parquet

来自分类Dev

为什么要在结构上使用&符号?

来自分类Python

为什么要在easy_install上使用pip?

来自分类Dev

为什么要在多个 if 语句上使用 elif 和 else?

来自分类Python

为什么要在Google App Engine上使用Django?

来自分类Dev

为什么要在冻结的对象上使用Object#clone?

来自分类Dev

为什么我要在StatefulWidget上使用StatelessWidget?

来自分类Dev

为什么要在Keras上使用纯TensorFlow?

来自分类Dev

为什么要在FreeBSD内核上使用Debian 6?

来自分类Dev

为什么我需要在资源上使用.close()

来自分类Dev

为什么要在主线程上订阅?

来自分类Dev

为什么要在小对象上同步?

来自分类Dev

什么时候以及为什么我们需要在bash上使用“ wait”命令?

来自分类Dev

当使用react-table时,为什么要在`ReactTable`上使用`useTable`

来自分类Dev

为什么要在AngularJS中使用$ onInit?

来自分类Dev

为什么要在golang中使用组合?

来自分类Dev

为什么要在 Angular 中使用 ValueAccessor?

来自分类Java

为什么要在Android中使用RequestQueue?

来自分类Dev

为什么要在Dialogflow中使用动作

Related 相关文章

  1. 1

    为什么要在pbuilder上使用sbuild?

  2. 2

    为什么要在memset上使用bzero?

  3. 3

    为什么要在Dict上使用HashDict?

  4. 4

    什么是gvfs,为什么要在我的系统上使用它?

  5. 5

    为什么要在void上使用int函数?

  6. 6

    为什么要在ThreadLocal上使用数据插槽?

  7. 7

    为什么要在Java / Spring上使用Scala / Lift?

  8. 8

    为什么要在object.freeze上使用immutablejs?

  9. 9

    为什么要在 [Align] 对齐上使用 [Expanded] / [Flexible] flex?

  10. 10

    sudoedit:为什么要在sudo vi上使用它?

  11. 11

    为什么要在诸如Postgres的RDBMS上使用Parquet

  12. 12

    为什么要在结构上使用&符号?

  13. 13

    为什么要在easy_install上使用pip?

  14. 14

    为什么要在多个 if 语句上使用 elif 和 else?

  15. 15

    为什么要在Google App Engine上使用Django?

  16. 16

    为什么要在冻结的对象上使用Object#clone?

  17. 17

    为什么我要在StatefulWidget上使用StatelessWidget?

  18. 18

    为什么要在Keras上使用纯TensorFlow?

  19. 19

    为什么要在FreeBSD内核上使用Debian 6?

  20. 20

    为什么我需要在资源上使用.close()

  21. 21

    为什么要在主线程上订阅?

  22. 22

    为什么要在小对象上同步?

  23. 23

    什么时候以及为什么我们需要在bash上使用“ wait”命令?

  24. 24

    当使用react-table时,为什么要在`ReactTable`上使用`useTable`

  25. 25

    为什么要在AngularJS中使用$ onInit?

  26. 26

    为什么要在golang中使用组合?

  27. 27

    为什么要在 Angular 中使用 ValueAccessor?

  28. 28

    为什么要在Android中使用RequestQueue?

  29. 29

    为什么要在Dialogflow中使用动作

热门标签

归档