2016-03-06 67 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文檔建議的「最佳實踐」嗎?
是的。