您的位置 首页 java

java高级for循环使用remove/add 问题

今天在高级 for循环 中用了一下remove发现报错,写了个demo测试看:

此时代码是没有问题的,运行正常;但是把”1”.equals(temp)换成”2”.equals(temp)之后,问题就出来了!

报了这么一堆异常。

自己想了想画了个图:

看图就明白了,该list每当删除一个元素时,集合的size方法的值都会减小1,这将直接导致集合中元素的 索引 重新排序,进一步说,就是剩余所有元素的索引值都减1,正如上图所示,而for 循环语句 局部变量 i仍然在递增,这将导致删除操作发生跳跃。从而导致上述代码还有删除的问题。

所以不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁。如下:

文章来源:智云一二三科技

文章标题:java高级for循环使用remove/add 问题

文章地址:https://www.zhihuclub.com/184501.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图