【发布时间】:2017-10-30 21:26:02
【问题描述】:
当我将数据一一推送到堆栈中并将数据添加到队列中时,它会在不排序的情况下存储,但是当我使用循环并将这些相同的数据推送到堆栈中并添加到队列中时,数据会按排序方式存储。另一件事是,当我将数据一个一个地推送到堆栈中时,它会一个一个地存储数据,但对于队列,它会随机存储数据。我不明白如何将数据存储在堆栈和队列中? 代码如下:
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Stack;
public class Stack_Queue_RealtionTwo {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
Queue<Integer> queue = new PriorityQueue<Integer>();
stack.push(5);
stack.push(2);
stack.push(3);
stack.push(1);
stack.push(4);
stack.push(6);
queue.add(5);
queue.add(2);
queue.add(3);
queue.add(1);
queue.add(4);
queue.add(6);
System.out.println("STACK: " + stack + "\nQUEUE: " + queue);
System.out.println("\nAFTER POP AND POLL\n");
System.out.println("STACK: " + stack.pop() + "\nQUEUE: " + queue.poll());
stack.clear();
queue.clear();
///using loop
int[] x = {5, 2, 3, 1, 4, 6};
for (int i = 0; i <= x.length; i++) {
stack.push(i);
queue.add(i);
}
System.out.println("\nSTACK: " + stack + "\nQUEUE: " + queue);
System.out.println("\nAFTER POP AND POLL\n ");
System.out.println("STACK: " + stack.pop() + "\nQUEUE: " + queue.poll());
}
}
输出是:
STACK: [5, 2, 3, 1, 4, 6]
QUEUE: [1, 2, 3, 5, 4, 6]
AFTER POP AND POLL
STACK: 6
QUEUE: 1
STACK: [0, 1, 2, 3, 4, 5, 6]
QUEUE: [0, 1, 2, 3, 4, 5, 6]
AFTER POP AND POLL
STACK: 6
QUEUE: 0
【问题讨论】:
-
那是因为您将
i放入列表中,而不是x[i]。 -
哦,如果你用索引遍历一个数组,使用
i<length而不是<=。否则,您将收到ArrayIndexOutOfBoundsException。也许使用 foreach 循环会更容易。 -
谢谢。使用 foreach 循环打印相同的值。
-
但是在队列中,数据如何存储? @MalteHartwig
-
什么意思?堆栈和列表都只是带有一些额外方法的列表,可以以某种方式访问值(队列为 FirstInFirstOut,堆栈为 LastInFirstOut)。所以他们会按照您放入的顺序添加元素。您想了解更具体的内部结构吗?然后你必须阅读JavaDoc,我相信还有更多细节。
标签: java algorithm data-structures stack queue