Java中使用for循环删除集合中元素需要注意的点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中使用for循环删除集合中元素需要注意的点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3059字,纯文字阅读大概需要5分钟。
内容图文
![Java中使用for循环删除集合中元素需要注意的点](/upload/InfoBanner/zyjiaocheng/778/b6a59587218c4c38978bdd23066212d9.jpg)
删除集合中的元素,第一反应是遍历集合,比较找到相应的元素然后删除。遍历集合最容易想到的是for循环。
删除集合中为3的元素:
1 List<Integer> list = new ArrayList<Integer>(); 2 for(int i = 0;i<10;i++){ 3 list.add(i); 4 } 5 for(int i = 0;i<10;i++){ 6 list.add(i); 7 } 8 System.out.println("删除前"+list); 9 System.out.println("size:"+list.size()); 10 for(int i = 0;i<list.size();i++){ 11 if(list.get(i)==3){ 12 list.remove(i); 13 } 14 } 15 System.out.println("删除后"+list); 16 System.out.println("size:"+list.size());
运行结果:
删除前[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] size:20 删除后[0, 1, 2, 4, 5, 6, 7, 8, 9, 0, 1, 2, 4, 5, 6, 7, 8, 9] size:18
看起来一点问题也没有,那么我们把集合中元素的顺序换一下。
1 List<Integer> list = new ArrayList<Integer>(); 2 for(int i = 0;i<10;i++){ 3 list.add(i); 4 list.add(i); 5 } 6 System.out.println("删除前"+list); 7 System.out.println("size:"+list.size()); 8 for(int i = 0;i<list.size();i++){ 9 if(list.get(i)==3){ 10 list.remove(i); 11 } 12 } 13 System.out.println("删除后"+list); 14 System.out.println("size:"+list.size());
运行结果:
删除前[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] size:20 删除后[0, 0, 1, 1, 2, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] size:19
问题出现了,当删除相邻两个重复元素的时候,只删除一个,这是什么原因呢?
ArrayList的底层结构是数组类型,数组的特点是删除某个元素时,后面所有元素的索引都会往前移,而此时for循环的指针是却是向下移动的。
解决方案一:使用每次删除元素的时候,将for循环指针回调一次
1 List<Integer> list = new ArrayList<Integer>(); 2 for(int i = 0;i<10;i++){ 3 list.add(i); 4 list.add(i); 5 } 6 System.out.println("删除前"+list); 7 System.out.println("size:"+list.size()); 8 for(int i = 0;i<list.size();i++){ 9 if(list.get(i)==3){ 10 list.remove(i); 11 i--; 12 } 13 } 14 System.out.println("删除后"+list); 15 System.out.println("size:"+list.size());
运行结果:
删除前[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] size:20 删除后[0, 0, 1, 1, 2, 2, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] size:18
解决方案二:使用迭代器
1 List<Integer> list = new ArrayList<Integer>(); 2 for(int i = 0;i<10;i++){ 3 list.add(i); 4 list.add(i); 5 } 6 System.out.println("删除前"+list); 7 System.out.println("size:"+list.size()); 8 Iterator<Integer> it = list.iterator(); 9 while(it.hasNext()){ 10 if(3==it.next()){ 11 it.remove(); 12 } 13 } 14 System.out.println("删除后"+list); 15 System.out.println("size:"+list.size());
运行结果:
删除前[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] size:20 删除后[0, 0, 1, 1, 2, 2, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9] size:18
内容总结
以上是互联网集市为您收集整理的Java中使用for循环删除集合中元素需要注意的点全部内容,希望文章能够帮你解决Java中使用for循环删除集合中元素需要注意的点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。