Java 为什么我的队列实现不能工作

Java 为什么我的队列实现不能工作,java,linked-list,queue,Java,Linked List,Queue,我试图用java实现一个队列的链表,我们从一个基本的IQueue接口开始工作,然后我们有一个列表元素类,它定义列表/队列中的元素,然后我们还有一个MyQueue类,其中存储了大量信息。我将提供下面的所有代码。我还编写了一个test.java主类来运行它,看看它是否正常工作。然后,当我编译并运行它时,我得到了一些错误,这些错误也将显示出来 接口: /** * An interface for a generic queue */ public interface IQueue<E> {

我试图用java实现一个队列的链表,我们从一个基本的IQueue接口开始工作,然后我们有一个列表元素类,它定义列表/队列中的元素,然后我们还有一个MyQueue类,其中存储了大量信息。我将提供下面的所有代码。我还编写了一个test.java主类来运行它,看看它是否正常工作。然后,当我编译并运行它时,我得到了一些错误,这些错误也将显示出来

接口:

/**
* An interface for a generic queue
*/
public interface IQueue<E> {

    // Add an element to the (end of) queue.
    public void enqueue(E element);

    // Remove and return element from the (start of) queue.
    public E dequeue();

    // Returns true when the queue has no elements, false otherwise.
    public boolean isEmpty();

}
很抱歉有这么多的代码,但我觉得这一切都需要帮助解决这个问题。提前感谢,以下是错误:

Exception in thread "main" java.lang.NoClassDefFoundError: test/java
Caused by: java.lang.ClassNotFoundException: test.java
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
有点意外,我把它弄错了。新错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2760)
    at java.util.Arrays.copyOf(Arrays.java:2734)
    at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
    at java.util.ArrayList.add(ArrayList.java:351)
    at MyQueue.toString(MyQueue.java:55)
    at test.main(test.java:6)

在toString方法中,您不会从head移动,并且如果没有该head,将始终具有下一个元素

while (head.getNext() != null){
     a.add(head.getNext());
}
所以你有一个有限循环

另外,在添加新元素时,当前尾部不仅必须用“next”引用新元素,新元素还必须用“prev”引用尾部

在toString中,你应该这样做

ListElement<E> item = head;
a.add(item);
while (item.getNext() != null){
     a.add(item.getNext());
     item = item.getNext();
}
tail.setNext(tmp);
tmp.setPrev(tail);
tail = tmp;

如何启动代码?看起来它在某个时候缺少权限或访问权限。您是如何导致该异常显示的?i、 你是如何编译和运行这段代码的?看起来你的类路径不正确。你不需要运行
java测试。java
,使用
java-cp。test
(不带.java扩展名)如果您还没有编译代码,请使用
javac test.java
(和其他)公共类test{public static void main(String args[]){MyQueue test=new MyQueue();test.MyQueue();我不知道这里发生了什么,但看起来你正在调用MyQueue的构造函数?也应该避免使用没有大写字母的测试。我得到的错误是某种类型的内存错误,所以我认为错误会出现,那么我应该怎么办来解决这个问题?抱歉,我不太确定?哦,我可能看到了问题。
while (head.getNext() != null){
     a.add(head.getNext());
}
ListElement<E> item = head;
a.add(item);
while (item.getNext() != null){
     a.add(item.getNext());
     item = item.getNext();
}
tail.setNext(tmp);
tmp.setPrev(tail);
tail = tmp;