一、前言
现在有一个ArrayList集合,存有多个字符串元素,问:在遍历ArrayList集合时移除指定元素的方式有哪些?对于这个问题,其实并不难,但如果用了错误的方式则不仅会解决不了问题还会出现异常报错,下面会介绍哪些方式可以解决,哪些方式不能解决~
二、解决方法
普通for循环遍历(✔️)
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
// 创建ArrayList集合并添加一些元素(含重复)
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("E");
list.add("E");
System.out.println(list);
for (int i = 0; i < list.size(); i++){
// 将集合中的"E"字符串删除
if (list.get(i).equals("E")) {
// 每次删除元素后,后面的元素都要往前移动一位,如果remove后继续遍历就会错过一个元素,所以此时i应该--
list.remove(i);
i--;
}
}
System.out.println(list);
}
}
💡结果:
[A, B, C, D, E, E, E]
[A, B, C, D]
普通for循环倒序遍历(✔️)
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
// 创建ArrayList集合并添加一些元素(含重复)
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("E");
list.add("E");
System.out.println(list);
for (int i = list.size() - 1; i >= 0; i--){
if (list.get(i).equals("E")) {
list.remove(i);
}
}
System.out.println(list);
}
}
💡结果:
[A, B, C, D, E, E, E]
[A, B, C, D]
迭代器遍历(✔️)
import java.util.ArrayList;
import java.util.Iterator;
public class Demo {
public static void main(String[] args) {
// 创建ArrayList集合并添加一些元素(含重复)
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("E");
list.add("E");
System.out.println(list);
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String str = iterator.next();
if ("E".equals(str)) {
iterator.remove();
}
}
System.out.println(list);
}
}
💡结果:
[A, B, C, D, E, E, E]
[A, B, C, D]
增强for循环遍历(❌)
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
// 创建ArrayList集合并添加一些元素(含重复)
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("E");
list.add("E");
System.out.println(list);
for (String s : list) {
if ("E".equals(s)) {
list.remove(s);
}
}
System.out.println(list);
}
}
❗结果报错:因为元素在使用的时候发生了并发的修改,导致异常抛出
[A, B, C, D, E, E, E]
Exception in thread "main" java.util.ConcurrentModificationException
**如果本篇文章对你有帮助的话,请点个赞叭~**