2017-02-15 21 views
-2

我應該如何彈出最後添加的項目,而不是第一個添加的項目?我嘗試過,但只是不起作用。謝謝如何彈出Java中第一個添加的項目?

import java.util.ArrayList; 
import java.util.List; 
import java.util.Stack; 

public class Exercise0204 { 

    public static void main(String[] args) { 
     Stack<String> stack = new Stack<String>(); 
     stack.push("bottom"); 
     System.out.println(stack); 

     stack.push("second"); 
     System.out.println(stack); 

     stack.push("third"); 
     System.out.println(stack); 

     stack.push("fourth"); 

     System.out.println(stack); 

      List list = new ArrayList(stack); 

     for (int i = 0; i <stack.size(); i++) {  

      list.remove(i); 
     } 


    } 

} 

謝謝。

+0

將'stack.size()'改爲'list.size() - 1'。這將消除錯誤。 –

+2

堆棧是後進先出。如果你想先進先出,那麼你需要一個隊列。如果你想從兩端刪除,使用一個Deque。 –

+0

你沒有從'stack'中刪除任何東西,你試圖從'list'中刪除元素。你能更清楚地解釋你的目標是什麼嗎? – shmosel

回答

-1

棧數據結構沒有定義第一個元素彈出的行爲。如前所述,這是一個LIFO數據結構。內部實現細節不相關(這是一個鏈表或其他內容)。

我寧願使用雙端隊列java.util.Deque。

Deque<String> deque = new LinkedList<>(); 

deque.push("S1"); 
deque.push("S2"); 
deque.push("S3"); 
deque.push("S4"); 
deque.push("S5"); 
deque.push("S6"); 
deque.push("S7"); 
deque.push("S8"); 

String last = deque.pollLast(); 
String first = deque.pollFirst(); 
+0

'Stack'擴展了'Vector',這是一個正確的'List'。這不是內部實現細節。 – shmosel

-1

這不應該起作用,堆棧在LIFO原理上工作,這意味着最後會先發生什麼。你可能在尋找的是一個按FIFO原則工作的隊列

+0

Java的'Stack'實際上是一個'List',它支持任意的插入和刪除順序。 – shmosel

0

如果你被困在一個真正的堆棧中,這樣做的方法是彈出所有內容並立即將其推入另一個堆棧。這將以相反的順序爲您提供一切。然後,新堆棧的頂層元素將成爲原始底層元素。

public E bottomElement(Stack<E> stack) { 
    if (stack.isEmpty()) throw new IllegalArgumentException("empty stack"); 

    // Flip the stack over. 
    final Stack<E> upsideDownStack = new Stack<E>(); 
    do { 
     upsideDownStack.push(stack.pop()); 
    } while (!stack.isEmpty()); 

    final E result = upsideDownStack.peek(); 

    // Flip the stack back over. 
    do { 
     stack.push(upsideDownStack.pop()); 
    } while (!upsideDownStack.isEmpty()); 

    return result; 
} 

如果你想刪除從堆棧底部元素,而不是隻返回它並將其保存在棧中,只是改變upsideDownStack.peek()upsideDownStack.pop()和改變最終do - while循環到while循環。

相關問題