list 删除值为指定的字段

一、List 包含两个 remove 方法

1️⃣按照下标索引删除
2️⃣按照值删除,删除第一个符合的值对象。

二、for 循环 remove

常见写法:(由于下标问题达不到想要效果)

for(int i=0;i<list.size();i++){
    if(list.get(i).equals("del"))
        list.remove(i);
}

但是直接使用list.remove(i)这个方法的时候,删除第一个继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。倒序操作可以避免下标问题,修改如下:

int size = list.size();
for(int i=size-1;i>=0;i--){
    if(list.get(i).equals("del"))
        list.remove(i);
}

三、foreach remove

常见错误:(会抛出ConcurrentModificationException)

for(String x:list){
    if(x.equals("del"))
        list.remove(x);
}

应改为:

//cowlist为原list
CopyOnWriteArrayList<Record> list = new CopyOnWriteArrayList<Record>(cowList);
for(String x:list){
    if(x.equals("del"))
        list.remove(x);
}

四、iterator 遍历 remove

注意:用的是迭代器的 remove 方法,而不是 list 的 remove 方法。

//iterator遍历,查出对应值,做对应操作
Iterator<String> it = list.iterator();
while(it.hasNext()){
    String x = it.next();
    if(x.equals("del")){
        it.remove();
    }
}

最好使用 Iterator 遍历,找到对应的值,全部给 remove 掉,这样就不会受索引的影响。

五、List 集合移除 null 元素

1️⃣集合空元素的处理,api 有直接处理的方法,使用的是迭代器,本质上还是 for 循环的思想。list.removeAll(Collections.singleton(null));

public static void main(String[] args) {
    List list = new ArrayList<>();
    list.add("1");
    list.add(null);
    list.add("2");
    list.add(null);
    System.out.println(list);//[1, null, 2, null]
    list.removeAll(Collections.singleton(null));
    System.out.println(list);//[1, 2]
}

2️⃣迭代器移除

public static void main(String[] args) {
    List<String> list = new ArrayList();
    list.add("1");
    list.add("2");
    list.add(null);
    Iterator it = list.iterator();
    while (it.hasNext()) {
        if (it.next() == null) {
            it.remove();
        }
    }
    System.out.println(list);
 }

3️⃣创建一个元素为 null 的 list,再 removeAll。

public static void main(String[] args) {
    List<String> list = new ArrayList();
    list.add("1");
    list.add("2");
    list.add(null);
    List nullList = new ArrayList();
    nullList.add(null);
    list.removeAll(nullList);
    System.out.println(list);
 }

4️⃣ 使用 for 循环:这种处理方式是把要处理的集合进行遍历,取出其中不为空的元素,添加到新的集合中。

public static <T> List<T> removeNull(List<? extends T> oldList) {
    List<T> listTemp = new ArrayList();
    for (int i = 0; i < oldList.size(); i++) {
        if (oldList.get(i) != null) {
            listTemp.add(oldList.get(i));
        }
    }
    return listTemp;
}
上一篇:力扣第二十三天(Tree Topic)


下一篇:MySQL数据库连接时报错Exception in thread “main“ java.lang.NullPointerException