如何在不删除 Java 中的内容的情况下显示后进先出堆栈的内容?
How can I show the content of a LIFO stack without deleting the content in Java?
我正在尝试创建一种遵循 LIFO 特征的 'history' 特征。最后输入第一个输出。
因此用户会引入一些词,这些词将被存储在一个堆栈中,以便在后记中打印它们。该程序总结如下:
Stack<String> history = new Stack<>();
String word = null;
while (!word.equals(exit)) {
word = scan.nextLine();
if (word.equals(show)) {
showHistory();
} else {
history.push(word);
}
}
和showHistory();
函数有这样的格式:
for (String i : history) {
System.out.println(i);
}
问题是,当我执行此操作时,我得到的输出是用户可能输入的单词,但采用 FIFO 格式。例如,如果用户介绍:
Pencil
Book
Shirt
这个程序显示的输出是:
Pencil
Book
Shirt
但是我想要的输出,按照 LIFO 格式是:
Shirt
Book
Pencil
我也不想在执行的任何时候删除堆栈存储的数据,所以我不想使用 history.pop();
因为,如果我没记错的话,那会删除堆栈中的数据。
我该怎么做?
提前致谢。
为此,您将创建一个可以临时保存弹出项目的助手堆栈:
Stack<String> temp = new Stack<>();
while(!history.isEmpty()){
System.out.println(history.peek());
temp.push(history.pop);
}
while(!temp.isEmtpy){
history.push(temp.pop);
}
想要倒序就倒序
for (ListIterator i = history.listIterator(history.size()); i.hasPrevious();) {
System.out.println(i.previous());
}
如果您可以随意使用任何 Java class,您可以使用 Deque 而不是 Stack 吗? iterator() 和 descendingIterator() 方法将完成您的工作。
https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html
来自 Stack 文档:Deque 接口及其实现提供了一组更完整和一致的 LIFO 堆栈操作,应优先使用 class。
我正在尝试创建一种遵循 LIFO 特征的 'history' 特征。最后输入第一个输出。
因此用户会引入一些词,这些词将被存储在一个堆栈中,以便在后记中打印它们。该程序总结如下:
Stack<String> history = new Stack<>();
String word = null;
while (!word.equals(exit)) {
word = scan.nextLine();
if (word.equals(show)) {
showHistory();
} else {
history.push(word);
}
}
和showHistory();
函数有这样的格式:
for (String i : history) {
System.out.println(i);
}
问题是,当我执行此操作时,我得到的输出是用户可能输入的单词,但采用 FIFO 格式。例如,如果用户介绍:
Pencil
Book
Shirt
这个程序显示的输出是:
Pencil
Book
Shirt
但是我想要的输出,按照 LIFO 格式是:
Shirt
Book
Pencil
我也不想在执行的任何时候删除堆栈存储的数据,所以我不想使用 history.pop();
因为,如果我没记错的话,那会删除堆栈中的数据。
我该怎么做?
提前致谢。
为此,您将创建一个可以临时保存弹出项目的助手堆栈:
Stack<String> temp = new Stack<>();
while(!history.isEmpty()){
System.out.println(history.peek());
temp.push(history.pop);
}
while(!temp.isEmtpy){
history.push(temp.pop);
}
想要倒序就倒序
for (ListIterator i = history.listIterator(history.size()); i.hasPrevious();) {
System.out.println(i.previous());
}
如果您可以随意使用任何 Java class,您可以使用 Deque 而不是 Stack 吗? iterator() 和 descendingIterator() 方法将完成您的工作。
https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html
来自 Stack 文档:Deque 接口及其实现提供了一组更完整和一致的 LIFO 堆栈操作,应优先使用 class。