Map遍历方式

在 Java 中,Map 接口用于存储键值对,有多种遍历 Map 的方式,下面为你详细介绍这些遍历方式及其示例代码。

1. 使用 keySet() 遍历

通过 keySet() 方法获取 Map 中所有键的 Set 集合,然后遍历该 Set,并通过键获取对应的值。

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapKeySetTraversal {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);

        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            Integer value = map.get(key);
            System.out.println("Key: " + key + ", Value: " + value);
        }
    }
}

优点:简单直接,适合只需要键或需要根据键获取值的场景。缺点:每次通过键获取值时,都需要进行哈希查找,效率相对较低。

2. 使用 values() 遍历

通过 values() 方法获取 Map 中所有值的 Collection 集合,然后遍历该 Collection。这种方式只能获取值,无法获取键。

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class MapValuesTraversal {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);

        Collection<Integer> values = map.values();
        for (Integer value : values) {
            System.out.println("Value: " + value);
        }
    }
}

优点:代码简洁,适合只需要值的场景。缺点:无法获取对应的键。

3. 使用 entrySet() 遍历

通过 entrySet() 方法获取 Map 中所有键值对的 Set 集合,每个键值对用 Map.Entry 对象表示,然后遍历该 Set

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapEntrySetTraversal {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);

        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println("Key: " + key + ", Value: " + value);
        }
    }
}

优点:效率较高,因为可以直接从 Map.Entry 对象中获取键和值,避免了通过键进行哈希查找。缺点:无明显缺点,是比较推荐的遍历方式。

4. 使用 Iterator 遍历

可以结合 keySet()values()entrySet() 方法获取对应的集合,然后使用 Iterator 进行遍历。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapIteratorTraversal {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);

        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        Iterator<Map.Entry<String, Integer>> iterator = entrySet.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Integer> entry = iterator.next();
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println("Key: " + key + ", Value: " + value);
        }
    }
}

优点:可以在遍历过程中使用 Iteratorremove() 方法安全地删除元素。缺点:代码相对复杂。

5. 使用 Java 8 的 forEach() 方法遍历

Java 8 引入了 forEach() 方法,可以结合 Lambda 表达式更简洁地遍历 Map

import java.util.HashMap;
import java.util.Map;

public class MapForEachTraversal {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("apple", 1);
        map.put("banana", 2);
        map.put("cherry", 3);

        map.forEach((key, value) -> {
            System.out.println("Key: " + key + ", Value: " + value);
        });
    }
}

优点:代码简洁,符合函数式编程风格。缺点:如果需要在遍历过程中进行复杂的操作,可能不太方便。

综上所述,在不同的场景下可以选择不同的遍历方式。如果只需要值,使用 values() 方法;如果需要键和值,推荐使用 entrySet() 方法;如果需要在遍历过程中删除元素,可以使用 Iterator 遍历;如果追求代码简洁,可以使用 Java 8 的 forEach() 方法。

Java集合框架 文章被收录于专栏

Java集合框架是Java提供的一组用于存储和操作数据的类和接口,它位于java.util包中,为开发者提供了强大且灵活的数据存储和处理能力。以下将从整体架构、主要接口、常用实现类、使用场景以及示例代码等方面详细介绍Java集合框架。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务