一、Java Map简介
Java中的Map是一种以Key-Value形式存储数据的集合。与List相比,Map更像是一张表格,而List则类似于一个数组。在Map中,每个元素都是一个键值对,其中Key是唯一的,Value可以重复。Map常用的实现类有HashMap、TreeMap、LinkedHashMap等。在这篇文章中,我们将详细地讨论Map的遍历方式,介绍Java Map的多种遍历方式和适用情况。二、Map遍历方式
1. 使用for-each循环遍历Map
使用for-each循环遍历Map是一种简单而常用的方式:
Mapmap = new HashMap<>(); map.put("apple", 3); map.put("orange", 5); map.put("banana", 2); for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey() + " = " + entry.getValue()); }
输出结果:
apple = 3 orange = 5 banana = 2
需要注意的是,在Java 8之前,无法使用Lambda表达式和Stream API遍历Map。如果你的代码要兼容旧版本的Java,就最好使用for-each循环遍历Map。
2. 迭代器遍历Map
使用迭代器遍历Map的方式如下:
Mapmap = new HashMap<>(); map.put("apple", 3); map.put("orange", 5); map.put("banana", 2); Iterator > iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.println(entry.getKey() + " = " + entry.getValue()); }
输出结果:
apple = 3 orange = 5 banana = 2
与for-each循环遍历Map相比,使用迭代器遍历Map的代码略显繁琐,但在某些情况下,使用迭代器遍历Map则更为灵活和高效。
3. 使用keySet遍历Map
使用keySet遍历Map是一种较为简单的方式。示例如下:
Mapmap = new HashMap<>(); map.put("apple", 3); map.put("orange", 5); map.put("banana", 2); for (String key : map.keySet()) { System.out.println(key + " = " + map.get(key)); }
输出结果:
apple = 3 orange = 5 banana = 2
需要注意的是,使用keySet遍历Map会比使用entrySet遍历Map稍微慢一点,因为每次循环都要通过key查询Value。
4. 使用values遍历Map
使用values遍历Map是一种比较简单,但效率较低的方式。示例如下:
Mapmap = new HashMap<>(); map.put("apple", 3); map.put("orange", 5); map.put("banana", 2); for (Integer value : map.values()) { System.out.println(value); }
输出结果:
3 5 2
需要注意的是,使用values遍历Map只能得到Map中的值,无法得到其对应的Key。
5. 使用Lambda表达式遍历Map
使用Lambda表达式遍历Map需要借助Java 8的新特性Stream API。示例如下:
Mapmap = new HashMap<>(); map.put("apple", 3); map.put("orange", 5); map.put("banana", 2); map.forEach((key, value) -> System.out.println(key + " = " + value));
输出结果:
apple = 3 orange = 5 banana = 2
使用Lambda表达式遍历Map,代码简洁、易读,适用于较简单的场景。
6. 使用Stream API遍历Map
使用Stream API遍历Map是一种较为灵活和高级的方式。示例如下:
Mapmap = new HashMap<>(); map.put("apple", 3); map.put("orange", 5); map.put("banana", 2); map.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(System.out::println);
输出结果:
apple=3 banana=2 orange=5
使用Stream API遍历Map会比其他方式更加灵活和高级,但其代码复杂度也更高,适用于较为复杂的场景。