您的位置:程序门 -> java -> j2se / 扩展类



关于用listiterator遍历,修改,删除arraylist的同步问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于用listiterator遍历,修改,删除arraylist的同步问题
发表于:2007-12-17 10:06:21 楼主
关于用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而动态变化,请问大家有什么解决方案没有,多谢了
发表于:2007-12-17 10:12:241楼 得分:0
我觉得可以在if里做个标记添加到数组或集合,然后等while结束后循环remove你不要的
发表于:2007-12-17 10:14:222楼 得分:0
如果你需要这样的处理,在while整段代码加上synchronized(arraylist),这样就不存在这个问题了。
发表于:2007-12-17 10:24:123楼 得分:0
正如你所说,listiterator的结构是第一次运行arraylistlist.iterator()的时候确定下来的,
如果要先修改arraylist,就在修改之后再运行arraylistlist.iterator(),
如果想运行的时候修改arraylist,就对listiterator进行操作,arraylist会跟着同步变化,
也就是说,一旦listiterator确定下来了,就不要改变arraylist的状态了,只需改变listiterator就能达到目的
发表于:2007-12-17 10:50:034楼 得分:0
请问如何解决多线程的同步问题呢?
发表于:2007-12-17 14:20:445楼 得分:0
java code
syncrhonized(arraylist) { listiterator itr = arraylist.listiterator(); while (itr.hasnext()) { //do something if (.....) { itr.remove(); } } }

发表于:2007-12-17 14:21:196楼 得分:0
java code
syncrhonized → synchronized
发表于:2007-12-22 19:05:147楼 得分:0
从链表里面打印出来的   数据为什么是[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();
}
帮看看   哈哈!
发表于:2007-12-24 17:39:308楼 得分:0
very   tied
发表于:2007-12-25 10:46:179楼 得分:0
  应该就是olivesoup说的那个意思吧
发表于:2007-12-26 09:33:1510楼 得分:0
(****)interator.next();   ****为转换为相应的类型。
发表于:2007-12-26 09:47:1711楼 得分:0
[ljava.lang.string;@de6ced      
是内存地址吧?!
发表于:2007-12-28 23:39:1612楼 得分:0
用synchronized进行同步操作
发表于:2008-01-14 23:31:3113楼 得分:0
用synchronized进行同步~~


快速检索

最新资讯
热门点击