方法有很多,比如可以在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()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)