xiaoliefengfeng 2011-08-02 17:13
浏览 343
已采纳

关于list的动态删除操作,报异常 ,求解

这样写代码会报错

      List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        Iterator<String>  iterator = list.iterator();
        while(iterator.hasNext()){
//          String s = iterator.next();
//          System.out.println(iterator.next());
            iterator.remove();
        }
        System.out.println(list.size());

 这样不报错

 写道
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String s = iterator.next();
iterator.remove();
}
System.out.println(list.size());

 这样也不报错

 写道
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){

System.out.println(iterator.next());
iterator.remove();
}
System.out.println(list.size());

 这是为什么了,求解
问题补充

magicyyao 写道
你换成Iterable应该就可以

我用的就是这个啊
  • 写回答

7条回答 默认 最新

  • iteye_171 2011-08-02 20:12
    关注

    你可以这么理解,具体游标的位置只是抽象的。

    游标:(*号表示游标的位置,它指向a的前面)

    • a b c d

    第一次
    while(iterator.hasNext()){//游标的右边有东西么?当然有了
    //下面这句然后游标往右边移动一个单位 a* b c d (游标*指向a了)
    String s = iterator.next();
    iterator.remove();//你移除游标指着的,就是a了,因为游标在a那啊 * b c d
    }

    第二次循环
    while(iterator.hasNext()){//游标的右边有东西么?当然有了
    //然后游标往右边移动一个单位 b* c d (*指向b了)
    String s = iterator.next();
    iterator.remove();//你移除,就是b了,因为游标在b那啊 剩下 * c d
    }

    在刚开始的时候游标在a左边,你不next一次,游标位置上没有东西啊,你怎么remove了?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波