关于用ListIterator遍历,修改,删除ArrayList的同步问题用ListIterator来遍历,修改,删除一个给定的ArrayList,会出现ConcurrentModificationException,就是说ListIterator的结构是第一次运行ArrayListlist.iterator()的时候确定下来的,以后如果remove了ArrayList的item,会出现ConcurrentModificationException,请问如何解决这个问题?code as following:
-----------------------
ListIterator itr = arrayList.listIterator();
while (itr.hasNext())
{
  //do something
  if (.....)
  {
     itr.remove(); 
  }
}
这段code会有潜在的ConcurrentModificationException,原因就是我上述说的问题,ListIterator的结构不会因ArrayList而动态变化,请问大家有什么解决方案没有,多谢了

解决方案 »

  1.   

    我觉得可以在if里做个标记添加到数组或集合,然后等while结束后循环remove你不要的
      

  2.   

    如果你需要这样的处理,在while整段代码加上synchronized(arrayList),这样就不存在这个问题了。
      

  3.   

    正如你所说,ListIterator的结构是第一次运行ArrayListlist.iterator()的时候确定下来的,
    如果要先修改arrayList,就在修改之后再运行ArrayListlist.iterator(),
    如果想运行的时候修改arrayList,就对ListIterator进行操作,arrayList会跟着同步变化,
    也就是说,一旦ListIterator确定下来了,就不要改变arrayList的状态了,只需改变ListIterator就能达到目的
      

  4.   

    syncrhonized(arrayList) {
      ListIterator   itr   =   arrayList.listIterator(); 
      while   (itr.hasNext()) 
      { 
          //do   something 
          if   (.....) 
          { 
                itr.remove();   
          } 
      } 
    }
      

  5.   

    syncrhonized → synchronized
      

  6.   

    从链表里面打印出来的 数据为什么是[Ljava.lang.String;@de6ced 的 
    public static void printList(List mylist)//自定义方法
    {
    System.out.println("正序遍历链表");
    ListIterator interator=mylist.listIterator();
    while(interator.hasNext())
    System.out.print("\t"+interator.next());
    System.out.println();
    }
    帮看看 哈哈!
      

  7.   

     应该就是OLIVESOUP说的那个意思吧
      

  8.   

    (****)interator.next(); ****为转换为相应的类型。
      

  9.   

    [Ljava.lang.String;@de6ced   
    是内存地址吧?!