List使用remove(index);遇到的问题;
来源:互联网 发布:37传奇霸业龙脉数据 编辑:程序博客网 时间:2024/05/14 12:00
作者:燕歆波
导读: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删除的下标1abcde2222删除后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)
阅读全文
0 0
- List使用remove(index);遇到的问题;
- geospatial index使用中遇到的问题
- 记一次处理 list 的 remove 方法遇到的问题
- JSONArray使用list遇到的问题
- 使用List的Remove方法时想起的小问题
- List.remove(int index)新发现
- java list remove的问题
- list remove泛型问题-----毕业设计遇到的问题综合总结
- List中使用remove出错的问题分析
- java中使用list.remove需要注意的问题
- 使用List中remove方法时需要注意的问题
- 注意list集合remove(index)方法的用法
- 今天遇到的对List,ArrayList的remove方法的一个小问题
- List遇到的问题
- java List remove 时的小问题
- List remove中要注意的问题
- java List remove 时的小问题
- List remove中要注意的问题
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 图片 压缩
- Hadoop MultipleOutputs输出到多个文件中
- javascript写在body和head的区别
- Java学习笔记-工厂模式
- List使用remove(index);遇到的问题;
- 向div中动态添加删除节点
- phpMyadmin 服务安全加固
- php根据IP获取用户地理位置
- Tyvj1059
- 你的项目如何选用合适的项目经理?
- Oracle常用函数
- Java虚拟机内存模型
- 简单聊聊VPC和SDN/NFV