因为遍历集合时,直接对数据进行删除操作会报错,或者会改变元素的相对位置,漏掉某些元素,导致没有删干净。
List<String> list = new ArrayList<>();
list.add("王麻子");
list.add("小李子");
list.add("李爱花");
System.out.println("删除前:" + list);
for (String s : list) {
if (s.contains("李")){
list.remove(s);
}
}
System.out.println("删除后:" + list);
博主在这里提供了以下三种方式
第一种:使用迭代器遍历集合并删除
List<String> list = new ArrayList<>();
list.add("王麻子");
list.add("小李子");
list.add("李爱花");
System.out.println("删除前:" + list);
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String s = iterator.next();
// 删除带“李”的元素
if (s.contains("李")){
// 注意不要使用list.remove(Object o)方法,会报错的
iterator.remove();
}
}
System.out.println("删除后:" + list);
第二种:遍历集合时,每次删除元素后,下标都减1
List<String> list = new ArrayList<>();
list.add("王麻子");
list.add("小李子");
list.add("李爱花");
System.out.println("删除前:" + list);
// 需要注意的是,这里的list.size()不能换成一个常量。如上面设置一个int length = list.size(),然后这里换成length,程序会报错的
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if (s.contains("李")){
list.remove(s);
// 每删掉一个元素,下标都减1
i--;
}
}
System.out.println("删除后:" + list);
第三种:从尾部开始遍历
List<String> list = new ArrayList<>();
list.add("王麻子");
list.add("小李子");
list.add("李爱花");
System.out.println("删除前:" + list);
// 从尾部开始遍历,需要注意i的初始值、结束条件和步进语句
for (int i = list.size() - 1; i > -1; i--) {
String s = list.get(i);
if (s.contains("李")) {
list.remove(s);
}
}
System.out.println("删除后:" + list);