您的位置:首页 > 其它

List使用remove(index);遇到的问题;

2017-09-06 14:57 751 查看
作者:燕歆波

导读:remove(index)是list根据下标来删除元素,可是当我们在for循环中遍历list删除某些元素的时候,却出现了有些元素无法删除的问题;

原因:

终于有一个问题我没有百度了(人家告诉我的),正常的遍历情况是这样子的

for (int i = 0; i < list.size(); i++) {
if(list.get(i).startsWith("abcde")){
System.out.println("删除的下标"+i);
list.remove(i);
}
}
for (String s : list) {
System.out.println(s+"删除后");
}


其实如果现在的数据是这样子的:

List<String> list= new ArrayList<>();
list.clear();
list.add("abcde1111");
list.add("abcde2222");
list.add("abcde3333");
list.add("abcde4444");


打印出来的结果是这样子的:

删除的下标0
删除的下标1
abcde2222删除后
abcde4444删除后


遍历后只删除了第一和第三个元素,可是删除的下标却是正常的0和1;

再删除第一个元素后,我们跳出不在循环,打印数据:

abcde2222删除后
abcde3333删除后
abcde4444删除后


其实现在下标0的数据应该是”abcde2222”,但是此时遍历中的i值已经加1,变成了1,那么第二次遍历时0的位置其实就已经被忽略了,删除的应该是”abcde3333删除后”这个元素,因为现在”abcde3333删除后”这个元素的位置才是1,然后再次遍历,i已经成了2,因为i从零开始,所以2代表的其实是第三个位置,可是list的长度现在只有2了,上次遍历之前的第三个位置应该是”abcde4444删除后”这个元素,可是现在”abcde4444删除后”这个元素的位置赫然已经变成了1,所以剩下的两个元素永远无法删除。

解决方法:

1.倒叙遍历,从后往前遍历,可以避免下标前移的问题

2.正常遍历,删除后将i的位置(下标的位置)前移,这样删除的永远是第0个位置。

for (int i = 0; i < list.size(); i++) {
if(list.get(i).startsWith("abcde")){
System.out.println("删除的下标"+i);
list.remove(i);
i = i-1;//这里手动将下标前移
}
}


网上说还可以使用Iterator遍历删除,我没试过,这里就给出两种方法,如果想要了解请参考(http://www.cnblogs.com/doudouxiaoye/p/5669481.html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐