黑马程序员技术交流社区

标题: Listiterator的问题 [打印本页]

作者: 唐志海    时间: 2014-1-4 16:23
标题: Listiterator的问题
本帖最后由 唐志海 于 2014-1-21 02:41 编辑
  1. <span style="line-height: 1.5;"><div class="blockcode"><blockquote>import java.util.*;

  2. public class ArrayListDemo
  3. {
  4.         
  5.         public static void sop(Object obj)
  6.         {
  7.                 System.out.println(obj);
  8.         }
  9.         public static void main(String[] args)
  10.         {
  11.                 ArrayList al=new ArrayList<String>();
  12.                 al.add("kk");
  13.                 al.add("kd");
  14.                 al.add("kc");
  15.                 al.add("ka");

  16.                
  17.                 ListIterator lit=al.listIterator();

  18.                
  19.                 while(lit.hasNext())
  20.                 {
  21.                         Object obj=lit.next();
  22.                         if(obj.equals("kc"))
  23.                          al.add("sx");
  24.                         
  25.                         
  26.                 }
  27.                         sop(al);
  28. }
  29. }
复制代码

为什么会发生ConcurrentModificationException异常

作者: taoge    时间: 2014-1-4 16:36
代码贴完整
作者: 李兴    时间: 2014-1-4 16:52
修改后的代码为

  1. class ArrayListDemo
  2. {
  3.         public static void sop(Object obj)
  4.     {
  5.             System.out.println(obj);
  6.     }
  7.     public static void main(String[] args)
  8.     {
  9.         ArrayList<String> al=new ArrayList<String>();
  10.         al.add("kk");
  11.         al.add("kd");
  12.         al.add("kc");
  13.         al.add("ka");

  14.         ListIterator<String> lit=al.listIterator();
  15.         while(lit.hasNext())
  16.         {
  17.             Object obj=lit.next();
  18.             if(obj.equals("kk"))
  19.                     lit.remove();
  20.         }
  21.         sop(al);
  22.     }
  23. }
复制代码

他会报并发操作异常,因为你在迭代他的同时进行删除操作,这会影响迭代结果,所以编

译器不允许删除操作,java意识到Iterator迭代器的局限性,所以才搞了个ListIterator

的专门操作List集合的迭代器,他封装了remove()方法,内部处理了迭代结果,所以可以

使用ListIterator的remove方法。而集合自己的remove方法就没有内部处理迭代结果,所

以。。。。
作者: 松毛    时间: 2014-1-4 17:30
你的对象用错了!应该用li.add()方法。
  1. import java.util.ArrayList;
  2. import java.util.ListIterator;

  3. public class Test03 {
  4.         public static void main(String[] args){
  5.                 ArrayList<String> al = new ArrayList<String>();
  6.                 al.add("ab");
  7.                 al.add("cd");
  8.                 al.add("ef");
  9.                 System.out.println(al);
  10.                
  11.                 ListIterator<String> li = al.listIterator();
  12.                 while(li.hasNext()){
  13.                         Object obj = li.next();
  14.                         if(obj.equals("cd"))
  15.                                 li.add("hi");   //这里使用迭代器的方法;
  16.                 }
  17.                 System.out.println(al);
  18.         }      
  19. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2