我想在执行以下代码后输出每个堆栈的内容。到目前为止,其输出为
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);
}
答案 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());
}