A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘郑瑞 中级黑马   /  2013-1-20 10:12  /  1703 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Iterator和集合类操作时有并发冲突:
public class Test9 {
        public static void main(String [] args){
                List list = new ArrayList();
                list.add("AA");
                list.add("bb");
                list.add(1);
                list.add('z');
               
                System.out.println(list);
                Iterator it = list.iterator();//怎么修改?ListIterator it = list.listIterator();
                while(true){
                         Object obj = it.next();
                         if(obj.equals("AA")){
                                 it.add("hahah");//这时候操作会发生冲突。
                         }
                }               
        }
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
ListIterator it = list.listIterator();
               while(it.hasNext()){
                        Object obj = it.next();
                        if(obj.equals("AA")){
                                it.add("hahah");//这时候操作会发生冲突。
                        }
               }  
               System.out.println(list);
Iterator只能查询,ListIterator能增删改查。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报

  1. <P> List list = new ArrayList();
  2.         list.add("AA");
  3.         list.add("bb");
  4.         list.add(1);
  5.         list.add('z');
  6.         
  7.         System.out.println(list);
  8.         ListIterator it = list.listIterator();
  9.         while(it.hasNext())
  10.         {
  11.                  Object obj = it.next();
  12.                  if(obj.equals("AA"))
  13.                  {
  14.                          it.add("hahah");
  15.                  }
  16.         }
  17.         System.out.println(list.toString());

  18. </P>
复制代码
Iterator 是一个接口它没有添加元素的方法,
         ListIterator 具有添加元素的方法
         你的代码中的while你写的是死循环,当集合中的元素取出来完的话,没没有元素可取
    就会报NoSuchElementException异常,
    所以当在取下一个元素时一定要判断集合中是否有元素,
    应该用迭代器中的hasNext()方法来判断

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 高浩 于 2013-1-23 16:05 编辑

Iterator  it=lis.ListIterator();
当迭代器迭代时,对元素进行操作时,过后产生了不确定性,所以会报错
可以通过ListIterator来解决,他可以实现边迭代,边实现操作,实现增删改查
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马