【问题标题】:How to define stack in Java [duplicate]如何在Java中定义堆栈[重复]
【发布时间】:2016-06-19 17:33:17
【问题描述】:

我知道 Java 搞砸了堆栈实现——通过扩展 Vector。矢量默认同步。阅读 java 文档,它说要创建一个堆栈,

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

因为我对 java 比较陌生。我的问题是:这是在 Java 中定义堆栈的最佳实践吗?

【问题讨论】:

  • 感谢@pczeus。不完全重复,只是想确认我对java实践的理解。
  • 我认为 ArrayDeque 是你最好的选择。

标签: java


【解决方案1】:

阅读Stack的javadoc:

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

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

即使Deque 的 javadoc 也这么说:

双队列也可以用作 LIFO(后进先出)堆栈。 应优先使用此接口,而不是旧的 Stack

遵循 java 文档的建议是“最佳实践”吗?
是的。

【讨论】:

    【解决方案2】:

    一般来说(不是特定于语言的),如果您想要动态堆栈实现,基于链表的实现提供了一个良好且高效的堆栈实现。如果您不想要动态实现,那么使用数组也是一个非常好的实现。在 Java 中,Deque 提供了很好的性能。或者,如果您愿意,也可以尝试这个使用内置堆栈的示例:

        static void showpush(Stack st, int a) {
          st.push(new Integer(a));
        //add appropriate print statements
       }
    
       static void showpop(Stack st) {
          Integer a = (Integer) st.pop();
        //add appropriate print statements
       }
    
       public static void main(String args[]) {
          Stack st = new Stack();
          showpush(st, 42);
          showpush(st, 66);
          showpush(st, 99);
          showpop(st);
          showpop(st);
          showpop(st);
       }
    

    【讨论】:

    • 我知道这是一个例子。两个精挑细选: 1. Stack 可能会更好。 2. new Integer(a) 不需要再做自动装箱。从性能的角度来看,堆栈的实现也非常糟糕。请参阅我原来的问题。
    猜你喜欢
    • 2016-04-08
    • 1970-01-01
    • 2013-01-30
    • 2016-05-16
    • 1970-01-01
    • 2015-12-25
    • 2021-11-20
    • 2014-11-30
    • 2011-04-13
    相关资源
    最近更新 更多