for循环删除list元素陷阱
首先我们先看一段代码,如下:
List<String> list=new ArrayList<String>();
list.add("123");
list.add("234");
list.add("134");
list.add("657");
list.add("198");
list.add("654");
for (int i = 0; i < list.size(); i++)
{
String str=list.get(i);
if(str.contains("1"))
{
//list.remove(i);
list.remove(str);
} }
System.out.println(list);
运行结果

结果也是对的,我们现在修改一下list中元素中的值,把第2个元素中加上一个1,代码如下:
List<String> list=new ArrayList<String>();
list.add("123");
list.add("2314");
list.add("134");
list.add("657");
list.add("198");
list.add("654");
for (int i = 0; i < list.size(); i++)
{
String str=list.get(i);
if(str.contains("1"))
{
//list.remove(i);
list.remove(str);
} }
System.out.println(list); }
运行结果:

结果不是我们所期望的,那么错在了哪里呢??
在for循环中,当删除第一个元素“123”之后,此时的list元素包括“2314” “134” “657” “198” “654”,再进行下一次循环时i=1,指向的str=“134”,把“2314”给跳了过去,所以不能把包含“2314”的元素删除,只是删除了 list中的元素奇数的包含1的元素

所以我们需要在删除完元素之后将i-1处理
List<String> list=new ArrayList<String>();
list.add("123");
list.add("2314");
list.add("134");
list.add("657");
list.add("198");
list.add("654");
for (int i = 0; i < list.size(); i++)
{
String str=list.get(i);
if(str.contains("1"))
{
//list.remove(i);
list.remove(str);
i--;
} }
System.out.println(list); }

for循环删除list元素陷阱的更多相关文章
- python循环删除列表元素常见错误与正确方法
python循环删除列表元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_ ...
- List 循环删除 指定元素的 方法
使用Iterator进行循环,在删除指定元素.如果使用for 或 foreach 在删除指定下标是,list.size 会相应的缩短且下标前移,导致相邻满足条件的元素未删除 Iterator<S ...
- java循环删除List元素的方法总结
1.for循环 2.迭代器 3.过渡法 import java.util.*; /** * Created by HP on 2018/8/2. */ public class Test { publ ...
- list循环删除单个元素
摘自https://www.cnblogs.com/pcheng/p/5336903.html JAVA中循环删除list中元素的方法总结 JAVA中循环遍历list有三种方式for循环.增强for循 ...
- foreach循环与迭代器循环 删除插入元素的区别
(1)仅对其遍历而不修改容器大小时,只使用foreach循环 (2)需要边遍历边修改容器大小时(插入删除元素),只使用迭代器循环 import java.util.HashMap;import ja ...
- JS for循环删除数组元素
$(function(){ var aa = [1,1,2,3,3,4,4,5]; alert(aa); for (var i = aa.length-1;i >= 0 ;i--) { if ( ...
- python循环删除列表元素留一个问题
https://www.cnblogs.com/baihualin/p/10698651.html 引用up
- golang list使用 双层 循环 删除 遍历
queue队列: import ( "container/list" "sync" ) type Queue struct { l *list.List m s ...
- java 在循环中删除数组元素
在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化. package com.fortunedr.thirdReport; import java.util.ArrayL ...
随机推荐
- php 编译安装curl 时候出现问题
/usr/bin/ld: ext/curl/.libs/interface.o: undefined reference to symbol 'CRYPTO_set_id_callback@@OPEN ...
- centos 下mysql操作
MySQL名字的来历MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度 快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为 ...
- Number对象
<script type="text/javascript"> /* Number对象. 创建Number对象的方式: 方式1: var 变量= new Number( ...
- 转:6款Java转C#的最佳工
原文来自于:http://designzum.com/2014/03/27/best-tools-to-convert-java-to-c-source-code/ ava is the class ...
- jquery-qrcode在线生成二维码
通过bower进行获取: y@y:ydkt$ bower install jquery-qrcode --save bower not-cached git://github.com/gcusnieu ...
- MySQL原生HA方案 – Fabric体验之旅
http://www.csdn.net/article/2014-08-20/2821300
- 进化计算简介和遗传算法的实现--AForge.NET框架的使用(六)
原文:进化计算简介和遗传算法的实现--AForge.NET框架的使用(六) 开学了,各种忙起来了… 上一篇介绍了AForge.NET在人工神经网络上的一点点使用,但是老觉不过瘾.matlab用着实在不 ...
- OpenRTSP的使用
由于需要研究OpenRTSP的源码,所以先学习下使用. -d [time]--------这个是录制时间,就是单位秒,超时后,程序自动结束. -i -----------以.avi文件格式生成. ...
- 【HDOJ】1332 LC-Display
水题. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 11 #defin ...
- Android豆瓣图书查询Demo
原文出自:方杰| http://fangjie.info/?p=26 转载请注明出处 首先先看一下Demo预览效果吧,主要也就是两个Activity.涉及到的技术有zxing开源项目的使用,网络协议豆 ...