您的位置:首页 > 其它

List.remove()在for循环中出现问题的三个解决方法

2019-08-15 13:21 183 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/u010813343/article/details/83211127

问题描述: 

用下面的方法remove,将出现缺项问题

[code]List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < 10; i++) {
list.add(i);
}
for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
list.remove(i);
}

结果出现02468,说明13579并没有被remove.

检验如下:

[code]for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}

将出现结果:13579

 

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

 

解决方法:

1)使用Iterator.remove()方法

[code]
Iterator<Integer> it = list.iterator();
while(it.hasNext()) {
System.out.print(it.next());
it.remove();
}

 

2)每移除一个元素以后再把i减1

[code]for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
list.remove(i);
i = i - 1;
}

 

3)for循环倒序遍历

[code]for(int i = list.size() - 1; i >= 0; i--) {
System.out.print(list.get(i));
list.remove(i);
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐