为什么不能在增强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本身进行添加/删除操作。
害怕失败的人,已经是一个loser!