我在使用addFirst()和addLast()方法后尝试显示此链表时遇到异常。
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;
public class File1 {
public static void main(String ...args){
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(1);
list.add(20);
list.add(30);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext())
System.out.print(iterator.next() + " ");
list.add(1,600);
System.out.println(list);
list.remove(1);
System.out.println(list);
System.out.println("now using linked list specific 2 methods...");
list.addFirst(901);
list.addLast(902);
while(iterator.hasNext())
System.out.print(iterator.next()+" ");
//this line throws Exception:
} //end of main()
} //end of class
答案 0 :(得分:1)
运行代码我得到ConcurrentModificationException
。
引用javadoc:
此类的
iterator
和listIterator
方法返回的迭代器是 fail-fast :如果在创建迭代器后的任何时候对列表进行结构修改,则任何除了通过Iterator自己的remove
或add
方法之外,迭代器将抛出ConcurrentModificationException
。
第二个while
循环使用第一个while
循环中的迭代器,并且列表已经“结构修改”。即使你没有得到这个错误,第二个循环也行不通,因为迭代器已经在结束了。
在第二个循环之前添加以下内容:iterator = list.iterator();
或者更好的是使用for
循环:for (Integer value : list)
或者甚至更好,只需像add
和remove
之后那样打印列表。
答案 1 :(得分:0)
在第二次循环之前创建新的迭代器并打印它。 例如: Iterator iterator1 = list.iterator();
答案 2 :(得分:0)
您可以使用以下代码。
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(1);
list.add(20);
list.add(30);
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext())
System.out.print(iterator.next() + " ");
list.add(1,600);
System.out.println(list);
list.remove(1);
System.out.println(list);
System.out.println("now using linked list specific 2 methods...");
list.addFirst(901);
list.addLast(902);
Iterator<Integer> iterator1 = list.iterator();
while(iterator1.hasNext())
System.out.print(iterator1.next()+" ");
//this line throws Exception: