Java 基本LinkedList/Iterator程序在没有解释的情况下终止

Java 基本LinkedList/Iterator程序在没有解释的情况下终止,java,linked-list,iterator,Java,Linked List,Iterator,有人能解释一下为什么下面的代码会导致程序立即终止吗? 在控制台或调试选项卡中几乎没有什么可参考的 提前谢谢 @鲍莫尔:谢谢,那是一个错误。然而,当我添加到ListIterator时,我得到了一个OutOfMemory:Java堆空间异常 package Buchalka1; import java.util.Iterator; import java.util.LinkedList; import java.util.ListIterator; public class LinkedList

有人能解释一下为什么下面的代码会导致程序立即终止吗? 在控制台或调试选项卡中几乎没有什么可参考的

提前谢谢

@鲍莫尔:谢谢,那是一个错误。然而,当我添加到ListIterator时,我得到了一个OutOfMemory:Java堆空间异常

package Buchalka1;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;

public class LinkedList2 {

    //--------------------------------------------------------------------------------------------------
    public static void main(String[] args)
    {
        LinkedList<String> letters = new LinkedList<String>();

        addInOrder(letters, "D");
        addInOrder(letters, "A");
        addInOrder(letters, "B");
        printList(letters);
    }
    //--------------------------------------------------------------------------------------------------
    public static void printList(LinkedList<String> list)
    {
        Iterator<String> iterator1 = list.iterator();
        while (iterator1.hasNext()) {
            System.out.println("Entry: " + iterator1.next());
        }
        System.out.println("-----------------------------------------------------");
    }
    //--------------------------------------------------------------------------------------------------
    public static void addInOrder(LinkedList<String> list, String newEntry)
    {
        ListIterator<String> listIterator1 = list.listIterator();

        while(listIterator1.hasNext()) {
            int comparison = listIterator1.next().compareTo(newEntry);
            if (comparison == 0) {
                // newEntry should not be added, because already present.
                System.out.println(newEntry + " is already part of the list.");
            } else if (comparison > 0) {
                // newEntry should be listed before the iterator's current entry.
                listIterator1.previous();
                listIterator1.add(newEntry);
            } else if (comparison < 0){
            }
        }
        listIterator.add(newEntry);
    }
    //--------------------------------------------------------------------------------------------------
}
包Buchalka1;
导入java.util.Iterator;
导入java.util.LinkedList;
导入java.util.ListIterator;
公共类LinkedList2{
//--------------------------------------------------------------------------------------------------
公共静态void main(字符串[]args)
{
LinkedList字母=新建LinkedList();
阿迪诺德(字母“D”);
addInOrder(字母“A”);
addInOrder(字母“B”);
印刷品清单(信件);
}
//--------------------------------------------------------------------------------------------------
公共静态无效打印列表(LinkedList列表)
{
迭代器迭代器1=list.Iterator();
while(iterator1.hasNext()){
System.out.println(“条目:“+iterator1.next());
}
System.out.println(“-----------------------------------------------------------------------”;
}
//--------------------------------------------------------------------------------------------------
publicstaticvoidaddinoder(LinkedList,stringnewentry)
{
ListIterator listIterator1=list.ListIterator();
while(listIterator1.hasNext()){
int comparison=listIterator1.next().Comparieto(newEntry);
如果(比较==0){
//不应添加新条目,因为已存在。
System.out.println(newEntry+“已经是列表的一部分”);
}否则如果(比较>0){
//newEntry应该列在迭代器的当前条目之前。
listIterator1.previous();
listIterator1.add(newEntry);
}否则如果(比较<0){
}
}
add(newEntry);
}
//--------------------------------------------------------------------------------------------------
}
控制台:

  • 线程“main”java.util.ConcurrentModificationException中出现异常 在 java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:966) 位于java.util.LinkedList$ListItr.next(LinkedList.java:888) Buchalka1.LinkedList2.addInOrder(LinkedList2.java:34)位于 Buchalka1.LinkedList2.main(LinkedList2.java:15)
调试:

  • 已终止LinkedList2[Java应用程序]
  • 终止,退出值:1>D:\Programs\java\jdk1.8\bin\javaw.exe (2019年12月17日,16:14:44)

在Java中,当您迭代列表时,不应编辑您正在迭代的列表

在您的例子中,您迭代LinkedList,并尝试向其中添加内容。 Java告诉您永远不要这样做

如果我对您的代码理解得足够好,那么您需要向列表中添加一项,并确保列表保持正确的顺序。 另一种方法是首先添加项(未排序),然后使用Collections.sort()对列表进行排序


这将帮助您摆脱这个恼人的错误,并使代码更加简洁易读。

您可以直接添加到列表中,同时仍然使用迭代器。改用迭代器上的add。