List使用remove(index);遇到的问题;
2017-09-06 14:57
751 查看
作者:燕歆波
导读:remove(index)是list根据下标来删除元素,可是当我们在for循环中遍历list删除某些元素的时候,却出现了有些元素无法删除的问题;
原因:
终于有一个问题我没有百度了(人家告诉我的),正常的遍历情况是这样子的
其实如果现在的数据是这样子的:
打印出来的结果是这样子的:
遍历后只删除了第一和第三个元素,可是删除的下标却是正常的0和1;
再删除第一个元素后,我们跳出不在循环,打印数据:
其实现在下标0的数据应该是”abcde2222”,但是此时遍历中的i值已经加1,变成了1,那么第二次遍历时0的位置其实就已经被忽略了,删除的应该是”abcde3333删除后”这个元素,因为现在”abcde3333删除后”这个元素的位置才是1,然后再次遍历,i已经成了2,因为i从零开始,所以2代表的其实是第三个位置,可是list的长度现在只有2了,上次遍历之前的第三个位置应该是”abcde4444删除后”这个元素,可是现在”abcde4444删除后”这个元素的位置赫然已经变成了1,所以剩下的两个元素永远无法删除。
解决方法:
1.倒叙遍历,从后往前遍历,可以避免下标前移的问题
2.正常遍历,删除后将i的位置(下标的位置)前移,这样删除的永远是第0个位置。
网上说还可以使用Iterator遍历删除,我没试过,这里就给出两种方法,如果想要了解请参考(http://www.cnblogs.com/doudouxiaoye/p/5669481.html)
导读: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)
相关文章推荐
- 在做动态添加删除行的时候,使用jquery遇到的问题:$("#participantList tr").eq(i).remove();
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- 嵌套Fragment的使用及遇到The specified child already has a parent. You must call removeView()问题的解决
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- java中使用list.remove需要注意的问题
- 嵌套Fragment的使用及遇到The specified child already has a parent. You must call removeView()问题的解决
- Lwuit tab和list组合使用遇到的问题
- 来谈一下我在使用fo-dicom开源库时遇到的一些问题,这篇主要就是针对从RIS那获取worklist的,希望能帮助那些刚接触这个开源库的。
- python:在for遍历list时使用remove出现的问题以及解析(转)
- 嵌套Fragment的使用及遇到The specified child already has a parent. You must call removeView()问题的解决
- JAVA 使用List中的remove方法遇到的坑
- 一个分别使用std::list的remove和erase的问题
- 使用List的remove方法需要的注意的问题
- 记一次处理 list 的 remove 方法遇到的问题
- List中使用remove出错的问题分析
- CSS Z-INDEX属性使用过程中遇到的问题
- python:在for遍历list时使用remove出现的问题以及解析
- 使用 comment-net-ftp-3.5.jar 实现FTPClient时遇到的listFiles()返回空的问题小结
- list使用中遇到的erase问题(List Iterator Not Incrementable)
- list使用中遇到的erase问题(List Iterator Not Incrementable)