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

印象中循环删除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方式。

以上这篇java中循环删除list中元素的方法总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
list循环删除
list循环删除元素、往list中循环添加元素、java 循环list、java list替换元素、java list 删除元素,以便于您获取更多的相关知识。

时间: 2024-10-01 23:28:26

java中循环删除list中元素的方法总结_java的相关文章

c-循环遍历过程中,删除数组的元素?

问题描述 循环遍历过程中,删除数组的元素? for(var i=0,len=arr.length; i<len; i++){ if(符合条件){ arr.splice(i); } } 像上面这样,在遍历过程中,删除某个元素,会存在问题,可能导致某些元素没有机会被遍历. 这个算法应该如何改进? 解决方案 for(var i=0,len=arr.length; i<len; ){ if(符合条件){ arr.splice(i); } else i++;/////// } 或者从后面开始遍历,就不需

JavaScript从数组中删除指定值元素的方法

 这篇文章主要介绍了JavaScript从数组中删除指定值元素的方法,实例分析了两种常用的javascript操作数组指定元素的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JavaScript从数组中删除指定值元素的方法.分享给大家供大家参考.具体分析如下: 下面的代码使用了两种方式删除数组的元素,第一种定义一个单独的函数,第二种为Array对象定义了一个removeByValue的方法,调用非常简单 定义函数removeByValue进行元素删除 ? 1 2 3 4

框架-JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了

问题描述 JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了 这些操作做完后,数据库里的t_product表中,id=2的数据依然在,不是刷新的问题,刷新也还在 解决方案 为什么你的三个函数保存.修改.删除方法调用sql的时候都没有传递sql参数值呢? 解决方案二: 调用mapper里面的sql代码的时候,把要删除的id传进去了吗?不应该是sqlsession.delete("",参数);吗? 解决方案三: 参数没带.sqlsession.delect带上id 解决

JavaScript从数组中删除指定值元素的方法_javascript技巧

本文实例讲述了JavaScript从数组中删除指定值元素的方法.分享给大家供大家参考.具体分析如下: 下面的代码使用了两种方式删除数组的元素,第一种定义一个单独的函数,第二种为Array对象定义了一个removeByValue的方法,调用非常简单 定义函数removeByValue进行元素删除 function removeByValue(arr, val) { for(var i=0; i<arr.length; i++) { if(arr[i] == val) { arr.splice(i,

去除arraylist容器中的相同的对象元素的方法_Android

<span class="keyword" style="background-color: rgb(250, 250, 250); font-size: 1em; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;">boolean</span><span style="

win7系统中怎么删除我的电脑中腾讯微云的图标?

  win7系统中怎么删除我的电脑中腾讯微云的图标?本人是不太喜欢资源管理器中乱添加软件图标.我相信很多朋友也会和我有一样的感受.但是现在越来越多的软件却不征的用户的同意,强行将图标添加到资源管理器中,这种流氓行为非常让人讨厌,而且不允许我们删除,那我们有没有办法让它消失呢? 1.首先按键盘:win键+R键,然后在弹出的运行窗口中输入regedit 回车,windows7以上的版本需要二次确认,点"是"打开 2.根据下方路径找到此列表项: ◆HKEY_CURRENT_USER ◢ So

c#-C#中数据库删除按钮中在下面update语句中显示数据库查询过于复杂

问题描述 C#中数据库删除按钮中在下面update语句中显示数据库查询过于复杂 string connstr = "Provider=Microsoft.Jet.OleDb.4.0;"; connstr += @"Data Source=GEARCNC.mdb"; OleDbConnection tempconn = null; try { if (MessageBox.Show("确定删除这一项吗?", "confirm Messag

去除arraylist容器中的相同的对象元素的方法

<span class="keyword" style="background-color: rgb(250, 250, 250); font-size: 1em; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;">boolean</span><span style="

C#集合遍历时删除和增加元素的方法_C#教程

本文实例讲述了C#集合遍历时删除和增加元素的方法.分享给大家供大家参考,具体如下: 大多数时候,遍历集合元素的时候并不需要对元素进行增加或者删除操作,但有些时候则需要,比如,如果集合中盛放的元素是社会上所有的人,那么有人死亡则元素删除,有人出生则是集合元素的增加.对于这种情况,遍历不能按照原来那种方式去做了,而且C#中的集合对于这类有增删动作的遍历,也不支持foreach循环. 有三种办法可以解决这一问题. 第一种方法:使用C#的LinkedList<>双链表.我原来设想,把原来链表需要删除的