Java 队列打印查询
我已经创建了一个通用类型的队列。当我试图打印出我创建的两个队列的内容时,结果将以“是第一个元素输出后进先出”而不是“先进先出”FIFO中最后一个元素的格式返回。我似乎无法按正确的顺序打印FIFO。我使用三个不同的类。MyNode类:Java 队列打印查询,java,generics,queue,Java,Generics,Queue,我已经创建了一个通用类型的队列。当我试图打印出我创建的两个队列的内容时,结果将以“是第一个元素输出后进先出”而不是“先进先出”FIFO中最后一个元素的格式返回。我似乎无法按正确的顺序打印FIFO。我使用三个不同的类。MyNode类: public class MyNode<T> { public T payload; public MyNode<T> next; public MyNode<T> previous; publi
public class MyNode<T> {
public T payload;
public MyNode<T> next;
public MyNode<T> previous;
public MyNode(T payload) {
this.payload = payload;
}
public MyNode(T payload, MyNode<T> next, MyNode<T> previous) {
this.payload = payload;
this.next = next;
this.previous = previous;
}
public T getPayload() {
return payload;
}
public MyNode<T> getNext() {
return next;
}
public MyNode<T> getPrevious() {
return previous;
}
public void setPayload(T payload) {
this.payload = payload;
}
public void setNext(MyNode<T> next) {
this.next = next;
}
public void setPrevious(MyNode<T> previous) {
this.previous = previous;
}
}
TestQueue类:
public class TestQueue {
public static void main(String[] args) {
MyQueue<String> qStr = new MyQueue<String>();
MyQueue<Integer> qInt = new MyQueue<Integer>();
qStr.enqueue("hello");
qStr.enqueue("world");
System.out.println("Size of queue: " + qStr.size());
System.out.println(qStr);
System.out.println();
qInt.enqueue(42);
qInt.enqueue(3);
System.out.println("Size of queue: " + qInt.size());
System.out.println(qInt);
System.out.println();
qStr.dequeue();
System.out.println(qStr);
System.out.println();
qInt.dequeue();
System.out.println(qInt);
}
}
public class MyQueue<T> {
public int size = 0;
public MyNode<T> front = new MyNode<T>(null);
public MyNode<T> back = new MyNode<T>(null);
public void enqueue(T payload) {
MyNode<T> newNode = new MyNode<T>(payload);
newNode.next = front;
front = newNode;
if (isEmpty()) {
back = newNode;
}
size++;
}
public T dequeue() {
if (isEmpty()) {
return null;
}
T payload = front.payload;
front = front.getNext();
size--;
return payload;
}
public boolean isEmpty() {
return front == null;
}
public int size() {
return size;
}
public String toString() {
return front.getPayload().toString();
}
}
MyQueue类:
public class TestQueue {
public static void main(String[] args) {
MyQueue<String> qStr = new MyQueue<String>();
MyQueue<Integer> qInt = new MyQueue<Integer>();
qStr.enqueue("hello");
qStr.enqueue("world");
System.out.println("Size of queue: " + qStr.size());
System.out.println(qStr);
System.out.println();
qInt.enqueue(42);
qInt.enqueue(3);
System.out.println("Size of queue: " + qInt.size());
System.out.println(qInt);
System.out.println();
qStr.dequeue();
System.out.println(qStr);
System.out.println();
qInt.dequeue();
System.out.println(qInt);
}
}
public class MyQueue<T> {
public int size = 0;
public MyNode<T> front = new MyNode<T>(null);
public MyNode<T> back = new MyNode<T>(null);
public void enqueue(T payload) {
MyNode<T> newNode = new MyNode<T>(payload);
newNode.next = front;
front = newNode;
if (isEmpty()) {
back = newNode;
}
size++;
}
public T dequeue() {
if (isEmpty()) {
return null;
}
T payload = front.payload;
front = front.getNext();
size--;
return payload;
}
public boolean isEmpty() {
return front == null;
}
public int size() {
return size;
}
public String toString() {
return front.getPayload().toString();
}
}
你把新来的人放在队伍的前面而不是后面。问题在于:
newNode.next = front;
//back.next = null;
front = newNode;
你应该做的是:
Node tmp = front;
while (tmp.next != null) tmp = tmp.next;
tmp.next = newNode;
我将把先前字段和大小的更新留给您。谢谢您的建议。