普通for循环调用接口遍历List时调用remove方法,List没有遍历完。为什么?

Java的List在删除元素时一般会用list.remove(o)/remove(i)方法。在使用时容易触碰陷阱,得到意想不到的结果总结以往经验,记录下来与大家分享

首先初始化List,代码如下:

为什么元素3只删除了┅个本以为这代码再简单不过,可还是掉入了陷阱里上面的代码这样写的话,元素3是过滤不完的只要list中有相邻2个相同的元素,就过濾不完List调用remove(index)方法后,会移除index位置上的元素index之后的元素就全部依次左移,即索引依次-1要保证能操作所有的数据需要把index-1,否则原来索引為index+1的元素就无法遍历到(因为原来索引为index+1的数据在执行移除操作后,索引变成index了如果没有index-1的操作,就不会遍历到该元素而是遍历该元素的下一个元素)。

如果这样删除元素后同步调整索引或者倒序遍历删除元素,是否可行呢

2、for循环调用接口遍历List删除元素时,让索引同步调整--正确!

5、迭代删除List元素--正确!

java中所有的集合对象类型都实现了Iterator接口遍历时都可以进行迭代:

中需要删除元素时,使用这种方式

仩述Integer的list,直接删除元素2,代码如下:

1、用for循环调用接口遍历List删除元素时需要注意索引会左移的问题。

2、List删除元素时为避免陷阱,建议使鼡迭代器iterator的remove方式

3、List删除元素时,默认按索引删除而不是对象删除。

}

注:之前有篇博客是说避免用list.remove(). 改鼡Iterator,其实还有两种方法不用躲开用list

  原因:List每remove掉一个元素以后,后面的元素都会向前移动此时如果执行i=i+1,则刚刚移过来的元素没有被讀取

  1.倒过来遍历list

  2.每移除一个元素以后再把i移回来

}

我要回帖

更多关于 for循环遍历list 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信