2016-03-06 62 views
0

我知道Java螺旋堆栈实现 - 通过扩展Vector。矢量默认同步。阅读java文档,它说要创建一个堆栈,因为我对java是相对陌生的。我的问题是:这是在Java中定义堆栈的最佳实践吗?如何在Java中定义堆栈

+0

谢谢@pczeus。不准确的重复每个说,只是想确认我对Java实践的理解。 – user1861417

+0

我认为ArrayDeque是你最好的选择。 –

回答

0

一般来说(不是语言特定的),如果你想要动态堆栈实现,基于链表的实现提供了一个好的和有效的堆栈实现。如果你不想要一个动态的实现,使用数组也是一个很好的实现。在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); 
    } 
+0

我知道这是一个例子。两个挑剔:1.堆栈可能会更好。 2.我们不需要为新整数(a)再次进行自动装箱。从性能的角度来看,Stack实现也很糟糕。看到我原来的问题。 – user1861417

1

阅读的Stack的Javadoc:

LIFO堆栈操作的更完整,一致通过设Deque接口及其实现,其中应优先于此类使用。例如:

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

即使是Deque javadoc中说,:

双端也可以用作LIFO(后进先出)堆栈。 此接口应优先于传统Stack类别使用。

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