JAVA中循环删除list中元素的方法总结

  印象中循环删除list中的元素使用for循环的方式是有问题的,但是可以使用增强的for循环,然后今天在使用时发现报错了,然后去科普了一下,再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。

  JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。

 

1、for循环遍历list

for(int i=0;i<list.size();i++){if(list.get(i).equals("del"))list.remove(i);
}

   这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素。比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。

 

2、增强for循环

for(String x:list){if(x.equals("del"))list.remove(x);
}

   这种方式的问题在于,删除元素后继续循环会报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。但是删除完毕马上使用break跳出,则不会触发报错。

 

3、iterator遍历

复制代码
Iterator<String> it = list.iterator();
while(it.hasNext()){String x = it.next();if(x.equals("del")){it.remove();}
}
复制代码

  这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的ConcurrentModificationException错误。

 

  总结:

  (1)循环删除list中特定一个元素的,可以使用三种方式中的任意一种,但在使用中要注意上面分析的各个问题。

  (2)循环删除list中多个元素的,应该使用迭代器iterator方式。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直流有刷电机与无刷电机的区别

首先介绍有刷电机与无刷电机工作原理&#xff0c;最后从调速方式及性能差异这两个方面详细的阐述了有刷电机与无刷电机的区别。 有刷电机与无刷电机工作原理 1、有刷电机 电机工作时&#xff0c;线圈和换向器旋转&#xff0c;磁钢和碳刷不转&#xff0c;线圈电流方向的交替变化…

MapReduce详解

MapReduce简介 MapReduce是一种编程模型&#xff0c;用于大规模数据集&#xff08;大于1TB&#xff09;的并行运算。概念"Map&#xff08;映射&#xff09;"和"Reduce&#xff08;归约&#xff09;"&#xff0c;是它们的主要思想。 MapReduce极大地方便了编…

JavaScriptBreak 语句 continue 语句

break 语句用于跳出循环。 continue 用于跳过循环中的一个迭代。 Break 语句 我们已经在本教程之前的章节中见到过 break 语句。它用于跳出 switch() 语句。 break 语句可用于跳出循环。 continue 语句跳出循环后&#xff0c;会继续执行该循环之后的代码&#xff08;如果有的话…

kernel mtd 分区与UBOOT 分区的理解

今天做内核移植&#xff0c;准备添加NAND flash的驱动&#xff0c;做到MTD分区时&#xff0c;想起在一本书上看到的一句话&#xff0c;说的是分区时每个区之间没有间隙&#xff0c;前一个区的结束地址是后一个区的起始地址。可是当我看我的开发板的教程时&#xff0c;分区如下&…

运放的主要参数详细介绍

1. 引言 运放的作用是调节和放大模拟信号&#xff0c;它是用途十分广泛的器件&#xff0c;接入适当的反馈网络&#xff0c;可用作精密的交流和直流放大器、有源滤波器滤波器、振荡器振荡器及电压比较器。其应用领域包括但不限制通讯、电子、汽车、工业检测等等&#xff0c;并将…

FastDFS 文件上传工具类

FastDFS文件上传工具类 import org.csource.common.NameValuePair;import org.csource.fastdfs.ClientGlobal;import org.csource.fastdfs.StorageClient1;import org.csource.fastdfs.StorageServer;import org.csource.fastdfs.TrackerClient;import org.csource.fastdfs.Tra…

MOS管的主要参数与重要特性

双极性晶体管&#xff1a;NPN和PNP管&#xff1b; 单极性晶体管&#xff1a;场效应管&#xff08;MOSFET和JFET&#xff09;&#xff1b; MOS管相对三极管具有速度快、输入阻抗高、噪声低、动态范围大、功耗小、容易集成等优点。 下面总结下其主要参数与重要特性&#xff0c…

【Codeforces Round #430 (Div. 2) B】Gleb And Pizza

【链接】点击打开链接 【题意】 在这里写题意【题解】 根据圆心到原点的距离这个东西判断一下圆在不在那个环里面就好【错的次数】 0【反思】 在这了写反思【代码】 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #…

垂直居中方法总结

<style>#box{position: absolute;margin: auto;top:0px;right: 0px;bottom: 0px;left: 0px;width: 100%;height: 30%;background-color: red;text-align: center;} </style> <body><div id"box"><h1>文字居中</h1></div> …

NAND 坏块管理

NAND的操作管理方式 NAND FLASH的管理方式&#xff1a;以三星FLASH为例&#xff0c;一片Nand flash为一个设备(device)&#xff0c;1 (Device) xxxx (Blocks)&#xff0c;1 (Block) xxxx (Pages)&#xff0c;1(Page) 528 (Bytes) 数据块大小(512Bytes) OOB 块大小(16Bytes&…

js备忘录模式——实现分页点击已经请求过上一页的数据(读js设计模式)

例子&#xff1a;新闻数据实现分页||点击下一页后又点击上一页后不用再次请求数据&#xff0c;避免资源浪费&#xff0c;网速不好&#xff0c;用户体验效果差 备忘录模式&#xff1a;在不破坏对象的封装性的前提下&#xff0c;在对象之外捕获并保存该对象内部的状态以方便日后对…

运放的典型电路举例与计算仿真

运放电路的计算&#xff0c;通过记各种公式很难记住&#xff0c;但是掌握其两个重要概念&#xff0c;所有计算均可迎刃而解。 那就是运放的两个重要特性&#xff1a; 虚断&#xff1a;运放本质特性&#xff0c;输入阻抗大&#xff0c;两个输入端视为等效开路&#xff1b; 虚…

【SPOJ 694】Distinct Substrings (更直接的求法)

【链接】h在这里写链接 【题意】 接上一篇文章【题解】 一个字符串所有不同的子串的个数∑(len-sa[i]-height[i])【错的次数】 0【反思】 在这了写反思【代码】 #include<bits/stdc.h> using namespace std;const int N 2e3; const int MAX_CHAR 300;//每个数字的最大…

HTML-锚点

<!DOCTYPE html> <html> <head lang"en"> <meta charset"UTF-8"> <title>锚点</title> <style> .box1,.box2{ height: 600px; border:1px solid; } </style> </head> <body> <a h…

/dev/mtdN和/dev/mtdblockN的区别

1、/dev/mtdn是linux中的MTD架构中&#xff0c;系统自己实现的mtd分区所对应的字符设备&#xff0c;其里面添加了一些ioctl&#xff0c;支持很多命令&#xff0c;如MEMGETINFO&#xff0c;MEMERASE等。 而mtd-util中的flash_eraseall等工具&#xff0c;就是以这些ioctl为基础而…

#define GPBCON (*(volatile unsigned *)0x56000010) 的理解

2019独角兽企业重金招聘Python工程师标准>>> 对于不同的计算机体系结构&#xff0c;设备可能是端口映射&#xff0c;也可能是内存映射的。如果系统结构支持独立的IO地址空间&#xff0c;并且是端口映射&#xff0c;就必须使用汇编语言完成实际对设备的控制&#xff…

三极管基本参数介绍与放大电路分析

全称为半导体三极管&#xff0c;也称双极型晶体管、晶体三极管&#xff0c;是一种电流控制电流的半导器件&#xff0c;作用是把微弱信号放大成幅度值较大的电信号&#xff0c; 也用作无触点开关。 两个PN结的排列方式有两种&#xff1a;PNP和NPN。 三个端点依序称为射极&#…

Nand分区及nand erase简解

我的nand flash 32M&#xff0c;kernel 2.6.18, rootfs is emb linux, cramfs.nand flash分区如下&#xff1a;static struct mtd_partition nand_partitions[] {/* bootloader (UBL, U-Boot, BBT) in sectors: 0 - 14 */{.name "bootloader",.offset 0,.size 32…

eclipse启动了tomcat,但是浏览器打不开欢迎页

tomcat在eclipse中启动成功&#xff0c;主页却打不开 症状&#xff1a; tomcat在eclipse里面能正常启动&#xff0c;而在浏览器中访问http://localhost:8080/不能访问&#xff0c;且报404错误。同时其他项目页面也不能访问。 关闭eclipse里面的tomcat&#xff0c;在tomcat安装目…

洛谷1011 车站

水题。题目描述有坑&#xff0c;可以先根据样例手算试一试//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn50; int f[50],…