如何从上到下显示每个堆栈的内容?

时间:2020-10-23 07:46:40

标签: java stack

我想在执行以下代码后输出每个堆栈的内容。到目前为止,其输出为

Stack@568db2f2
Stack@378bf509
Stack@378bf509

但是我想要每个堆栈的内容。

代码:

public static void main(String[] args) {
    Stack<Integer> a = new Stack<>();
    Stack<Integer> b = new Stack<>();
    Stack<Integer> c = new Stack<>();

    a.push(28);
    b.push(a.pop());
    b.peek();
    c.push(21);
    a.push(14);
    a.peek();
    b.push(c.pop());
    c.push(7);
    b.push(a.pop());
    b.push(c.pop());

    System.out.println(a);
    System.out.println(b);
    System.out.println(b);

}

2 个答案:

答案 0 :(得分:0)

Stack<E>Vector<E>的子类,您可以在以下位置使用.size().elementAt(int index)

Stack<String> stack = new Stack<String>();
stack.push("!");
stack.push("world");
stack.push(" ");
stack.push("Hello");
for (int i = stack.size() - 1; i >= 0; --i) {
  System.out.print(i);
}
System.out.println();

但是,正如Federico所指出的那样,如果您在打印时不关心清空堆栈,那么也可以循环调用.pop()直到它们为空。

但是,正如this answer指出的那样,您应该使用Deque<E>而不是Stack<E>LinkedList<E>实现了Deque<E>,可以轻松地遍历以打印其元素(从上到下):

Deque<String> stack = new LinkedList<String>();
stack.push("!");
stack.push("world");
stack.push(" ");
stack.push("Hello");
for (String item : stack) {
  System.out.print(item);
}
System.out.println();

答案 1 :(得分:0)

似乎类toString()的默认Stack会打印堆栈在内存中的位置或类似的内容,而不是打印堆栈的内容。您应该为每个堆栈使用以下代码(stk是您要打印其内容的原始堆栈名称):

//Create another temporary Stack
Stack<Integer> temp = new Stack<>();

//Print each content of the original Stack (stk) separately.
//Move each content to the temporary Stack (temp), in order to preserve it.
while(! stk.empty())
   {
       System.out.println(stk.peek());
       temp.push(stk.pop());
   }

//Move all the content back to the original Stack (stk)
while(! temp.empty())
   {
       stk.push(temp.pop());
   }