解决JAVA遍历List集合,删除数据时出现的问题
作者:时间-海 发布时间:2021-12-25 15:38:03
标签:JAVA,遍历,list,集合,删除数据
一、问题描述
有时候,我们会遇到在遍历List集合的过程中删除数据的情况。
看着自己写的代码,感觉完全没有问题,但就是达不到预期的效果,这是为什么呢?下面我们来分析下
String str1 = new String("1");
String str2 = new String("2");
String str3 = new String("3");
String str4 = new String("4");
String str5 = new String("5");
List list = new ArrayList();
list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
list.add(str5);
System.out.println("list.size()=" + list.size());
for (int i = 0; i < list.size(); i++) {
list.remove(i);
// i--;
//System.out.println(i+" "+list.get(i)+" ");
}
System.out.println("after remove:list.size()=" + list.size());
本来预期结果应该是:
list.size()=5
after remove:list.size()=0
但实际上结果却是:
list.size()=5
after remove:list.size()=2
原因如下: List每remove掉一个元素以后,后面的元素都会向前移动 ,此时如果执行i++,则刚刚移过来的元素没有被读取。
分析:
List中有5条数据,需要循环5次,
第一次数据为:1 2 3 4 5
执行完remove(0) 后,数据为 2 3 4 5 , i=1
第二次数据为:2 3 4 5
执行完remove(1) 后,数据为 2 4 5 , i=2
第三次数据为:2 4 5
执行完remove(2) 后,数据为 2 4 , i=3
此时如果加上上面注释的代码 System.out.println(i+" "+list.get(i)+" "); 循环第4、5次时就会出现异常
二、解决方法
解决方法1:每移过一次后,再把 i 移回来
for (int i = 0; i < list.size(); i++) {
list.remove(i);
i--;
}
解决方法2:先删除后面的元素
for (int i = list.size()-1; i >= 0; i--) { list.remove(i); }
解决方法3:使用iterator删除
for(Iterator it = list.iterator();it.hasNext();){
it.remove();
}
来源:https://www.cnblogs.com/wslook/p/9385815.html
0
投稿
猜你喜欢
- 源程序揭秘杨辉三角形性质: 每行数字左右对称,由 1 开始逐渐变大,然后变小,回到 1。 第 n 行的数字个数为 n 个。 第 n 行数字和
- 问题:写了一个新的dao接口,进行单元测试时提示:Initialization of bean failed; nested excepti
- 实现方案:我们直接参考实例代码:private String pattern = "((http|ftp
- 一、BufferedImage类介绍生成验证码图片主要用到了一个BufferedImage类,如下:创建一个DrawImage Servle
- 最近回顾了一下java继承中的问题,下面贴代码:public class Base {protected String temp = &qu
- 本文实例讲述了C#使用oledb操作excel文件的方法。分享给大家供大家参考。具体分析如下:不管什么编程语言都会提供操作Excel文件的方
- Shiro是什么Shiro是一个Java平台的开源权限框架,用于认证和访问授权。具体来说,满足对如下元素的支持:用户,角色,权限(仅仅是操作
- ImageCacheconst int _kDefaultSize = 1000;const int _kDefaultSizeBytes
- 1. 栈1.1 概念栈:是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。特点:栈中的数据元素遵循先进后出的原则,但要注意进的
- Java的常量池通常分为两种:静态常量池和运行时常量池静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面
- Jmeter 执行Java 请求时,运行结束后报错,Tidying up remote @ Mon Feb 24 19:42:34 CST
- 前言:各位小伙伴们,大家好,一日不见,如隔一日,今天我给大家分享一下大家在学习java过程当中遇到的一个问题,也是一道面试题,java中,O
- shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/ 它提供了很方便的权限认证和
- 目录1.前言2.不同进制的特点3.进制之间的转换3.1 二进制转十进制:3.2 十进制转二进制:3.3 二进制转八进制:3.4 十六进制转二
- 说明:本文记录如何在Idea下,利用Maven管理项目,并整合SSM(Spring + Spring MVC +Mybatis)框架,实现简
- 前言最近在刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经
- 前言微服务架构,前后端分离目前已成为互联网项目开发的业界标准,其核心思想就是前端(APP、小程序、H5页面等)通过调用后端的API接口,提交
- 本文实例讲述了JavaMail实现邮件发送的方法。分享给大家供大家参考。具体如下:下载 activation.jar 和 mail.jar配
- 第一个Lambda表达式在Lambda出现之前,如果我们需要写一个多线程可能需要下面这种方式:Runnable runnable = new
- 项目中有这样一个需求,网页上上传了一个视频,需要获取此视频的时长、大小,把这两个数据返回给前