zoukankan      html  css  js  c++  java
  • 为什么不能在增强for循环和迭代过程中通过list本身进行添加/删除操作

    1.在增强for循环中除元素:

    结果:

    2.在迭代过程中通过list本身删除:

    结果:

    3.原因:

    1实际原因:ArrayList源代码中有这么一个方法:在迭代器的hasNext()、next()方法都会被调用。作用是判断list的大小有没有变化,如果变了,就抛异常。也就是说,源代码就规定了不能在迭代过程中通过List本身进行添加/删除操作。

    2根本原因(个人理解):list.remove(s):通过数组遍历,找到s将其删除,然后把后面的元素前移,size-1

    iterator.remove():原理一样,但是iterator.hasNext()判断的是有没有下一个元素,cursor指向的是下一个元素的索引。

    所以,在迭代过程中通过list本身添加/删除元素,由于没有改变cursor的值,假如cursor指向最后一个元素,那么list.remove(*)之后,cursor指向的元素前移了,但是cursor不知道呀,再迭代就会出错;同理,添加元素的话,cursor本来指向null,现在实际上是一个新的元素,cursor也不知道。所以,干脆禁止在迭代过程中通过List本身进行添加/删除操作。

     

  • 相关阅读:
    第6章 函数 习题
    2. VS使用---HelloWorld
    [计蒜客]小 B 的题目
    [计蒜客] n 子棋
    [博弈]Euclid's Game
    [博弈]A Funny Game
    [博弈]Being a Good Boy in Spring Festival
    [组合数学]Magic 12 Months(坑)
    [PTA]L2-031 深入虎穴 (25 分)
    [天梯赛]L2-029 特立独行的幸福
  • 原文地址:https://www.cnblogs.com/xiangguoguo/p/9046038.html
Copyright © 2011-2022 走看看