Java 队列打印查询

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

我已经创建了一个通用类型的队列。当我试图打印出我创建的两个队列的内容时,结果将以“是第一个元素输出后进先出”而不是“先进先出”FIFO中最后一个元素的格式返回。我似乎无法按正确的顺序打印FIFO。我使用三个不同的类。MyNode类:

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;

我将把先前字段和大小的更新留给您。

谢谢您的建议。