Java中list如何利用遍历进行删除 *** 作

Java中list如何利用遍历进行删除 *** 作,第1张

方法有很多,比如可以在for和foreach 等循环遍历,然后删除,

下面在介绍两种方案. 第一种.迭代循环, 然后删除. 第二种java8开始的流 *** 作

import java.util.*

import java.util.stream.Collectors

public class MyListDemo {

public static void main(String[] args) {

test1() //传统方法

test2() // java8开始的新方法

}

// 传统的方法

public static void test1() {

// 创建一个list类

List<String> list = new ArrayList<>(Arrays.asList("ab", "cd", "11", "ef"))

// 迭代遍历查找

Iterator<String> it = list.iterator()

while (it.hasNext()) {

String x = it.next()

if (x.equals("11")) {

it.remove() // 用迭代器删除

}

}

System.out.println(list)

}

//下面是 JAVA8的处理方式

private static void test2() {

List<String> list2=new ArrayList<>(Arrays.asList("ab","cd","11","ef"))

List<String> list3=list2

.stream() //得到流,准备进行流处理

.filter(x->!x.equals("11")) // 过滤掉等于"11"的元素

.collect(Collectors.toList()) // 收集起来

System.out.println(list3)

}

}

如果是删除指定元素则如下:

ArrayList al = new ArrayList()

al.add("a")

al.add("b")

//al.add("b")

//al.add("c")

//al.add("d")

for (int i = 0i <al.size()i++) {

if (al.get(i) == "b") {

al.remove(i)

i--

}

1、for循环遍历list

for(int i=0i<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()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11796338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存