Java 之 Map遍历并删除的几种方法对比

目录

方法一:使用 Iterator

方法二:使用 Java 8 的 removeIf 方法

方法三:使用 for-each 循环和临时集合

方法四:使用 Map 的 entrySet 和 remove 方法

总结


在Java中,遍历并删除 Map 中的元素有几种常见的方法。每种方法都有其适用场景和优缺点。以下是几种常见的方法:

方法一:使用 Iterator

使用 Iterator 是一种安全的方法,可以在遍历过程中删除元素,而不会抛出 ConcurrentModificationException

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 创建一个示例 Map
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);
        map.put("date", 4);

        // 使用 Iterator 遍历并删除符合条件的元素
        Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> entry = iterator.next();
            if (entry.getValue() % 2 == 0) {
                iterator.remove();
            }
        }

        // 打印结果
        System.out.println(map); // 输出: {apple=1, cherry=3}
    }
}

方法二:使用 Java 8 的 removeIf 方法

Java 8 引入了 Collection 接口的 removeIf 方法,可以方便地删除符合条件的元素。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 创建一个示例 Map
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);
        map.put("date", 4);

        // 使用 removeIf 方法删除符合条件的元素
        map.values().removeIf(value -> value % 2 == 0);

        // 打印结果
        System.out.println(map); // 输出: {apple=1, cherry=3}
    }
}

方法三:使用 for-each 循环和临时集合

如果使用 for-each 循环直接删除元素会导致 ConcurrentModificationException,可以先将要删除的元素存储在临时集合中,然后再进行删除。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 创建一个示例 Map
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);
        map.put("date", 4);

        // 使用临时集合存储要删除的元素
        List<String> keysToRemove = new ArrayList<>();
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            if (entry.getValue() % 2 == 0) {
                keysToRemove.add(entry.getKey());
            }
        }

        // 删除临时集合中的元素
        for (String key : keysToRemove) {
            map.remove(key);
        }

        // 打印结果
        System.out.println(map); // 输出: {apple=1, cherry=3}
    }
}

方法四:使用 Map 的 entrySet 和 remove 方法

直接使用 MapentrySetremove 方法也可以实现删除操作,但需要注意避免 ConcurrentModificationException

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 创建一个示例 Map
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);
        map.put("date", 4);

        // 使用 entrySet 和 remove 方法删除符合条件的元素
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            if (entry.getValue() % 2 == 0) {
                map.remove(entry.getKey());
            }
        }

        // 打印结果
        System.out.println(map); // 输出: {apple=1, cherry=3}
    }
}

总结

  1. 使用 Iterator:适用于任何类型的 Map,是最安全的方法。
  2. 使用 Java 8 的 removeIf 方法:简洁且易于理解,适用于支持 removeIf 方法的集合。
  3. 使用 for-each 循环和临时集合:避免 ConcurrentModificationException,但需要额外的内存开销。
  4. 使用 Map 的 entrySet 和 remove 方法:直接操作 Map,但需要注意避免 ConcurrentModificationException

作者:爱吃土豆的程序员

物联沃分享整理
物联沃-IOTWORD物联网 » Java 之 Map遍历并删除的几种方法对比

发表回复