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 ...
随机推荐
- error on line 1 at column 6: XML declaration allowed only at the start of the document
This page contains the following errors: error on line 1 at column 6: XML declaration allowed only a ...
- 转:AM335X 启动流程
链接: http://blog.csdn.net/hudaweikevin/article/details/10376585 作者:David_Hu 启动顺序(针对TI OMA3 EVM) linu ...
- spark1.1.0源码阅读-executor
1. executor上执行launchTask def launchTask( context: ExecutorBackend, taskId: Long, taskName: String, s ...
- ural 1837 Isenbaev's Number
http://acm.timus.ru/problem.aspx?space=1&num=1837 #include <cstdio> #include <cstring&g ...
- 通过MYSQL命令行直接建数据库
因为同事要求,在进行MYSQLDUMP的导入库时,加一个日期标签, BUT,MYSQLDUMP的前提是数据库中要存在数据库名, 于是通过-e 参数执行命令. 这让我想起了前不久请教同事,如果AWK传变 ...
- QT程序制作deb包并安装在应用程序菜单
制作原理:打包:将QT制作的源程序(没有编译的)用debian压缩打包(这里是用脚本对源程序再编译)安装:将deb包中的源程序解压(默认解压到根目录)到规定系统文件中并编译(postinst脚本)卸载 ...
- Java基础加强学习笔记(二)
一.反射的基础Class类 1.如何得到各个字节码对应的实例对象 (1)类名.class,例如 System.class (2)对象.getClass(),例如 new Data().getClass ...
- bzoj3791 作业
Description 众所周知,白神是具有神奇的能力的. 比如说,他对数学作业说一声“数”,数学作业就会出于畏惧而自己完成:对语文作业说一声“语”,语文作业就会出于畏惧而自己完成. 今天,语文老师和 ...
- Codeforces 460 DE 两道题
D Little Victor and Set 题目链接 构造的好题.表示是看了题解才会做的. 假如[l,r]长度不超过4,直接暴力就行了. 假如[l,r]长度大于等于5,那么如果k = 1,显然答案 ...
- java随机数生成器
一.java.lang.Math.Random 调用这个Math.Random()函数能够返回带正号的double值,取值范围是[0.0,1.0)的左闭右开区间,并在该范围内(近似)均匀分布. 二.j ...