作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
近期荣誉:华为云云享专家、阿里云专家博主、
三连支持:欢迎 ❤️关注、点赞、收藏三连,支持一下博主~
Map的循环遍历是一种很常见的循环遍历,他可被用于数组、对象、集合等多种数据类型之间进行循环遍历,获取数据的值。Map的用途很广,所有的的开发者Map应该都不陌生,每次面试也都会遇到Map相关的很多问题。本篇主要想简单介绍下Map的循环遍历相关的特性以及使用Map的一些思考。
Map是一个接口容器,用来搜索(动态查找)的容器,其搜索的效率与其具体的子类有关。它是一种以键值对方式存储数据的集合结构,将键映射到对象,键和对象之间有一个映射函数(散列函数),即 key -> f(x) -> value
,一个key只能对应一个value。Map接口是这类集合结构的一个统一抽象,根据不同的应用场景分别有不同实现类。常用的实现类有HashMap
,Hashtable
,LinkedHashMap
,TreeMap
,SortedMap
,Collection
,Set
。
Map的遍历有很多方式,常见的也就是Map.Entry接口for循环、Map.Entry接口迭代器、增强的for循环、Java 8的Streams API。
Map.Entry接口for循环这种方式需要创建Map.Entry对象,并且需要调用getKey()和getValue()方法来访问键和值。当数据量大时,对于大量的键值对,这种方式可能会稍微慢一些。
● 优点:可以同时访问键和值,并且可以方便地访问和修改它们。
● 缺点:代码略显冗长。
示例代码:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
}
虽然使用迭代器进行循环,但是本质还是遵循for循环,也就是方法(1)。当数据量大时,对于大量的键值对,这种方式可能会稍微慢一些。在IDE中粘贴这个代码后,IDE也是建议我们修改为方法(1)来处理。
● 优点:可以同时访问键和值,并且可以方便地访问和修改它们。
● 缺点:代码略显冗长。
示例代码:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = iterator.next();
String key = entry.getKey().toString();
Integer value = Integer.valueOf((String) entry.getValue());
System.out.println("Key = " + key + ", Value = " + value);
}
}
这种方式不需要创建额外的对象,并且可以直接通过键访问值,因此性能相对较高。
● 优点:简洁易读,代码量少。
● 缺点:只能按键访问值,如果需要同时访问键和值,需要使用map.get(key)方法。
示例代码:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
for (String key : map.keySet()) {
System.out.println("Key = " + key + ", Value = " + map.get(key));
}
}
Streams API方式使用了Java 8的函数式编程特性,可以方便地进行复杂的数据处理操作。然而,它需要对数据进行多次遍历,因此在处理大量数据时可能会稍微慢一些。当数据量少时,略显臃肿;当数据量大时,性能上可能不是很好。
● 优点:可以轻松地进行复杂的数据处理和转换操作,例如过滤、映射等。
● 缺点:对于简单的遍历操作来说,代码可能略显复杂。
示例代码:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
// 使用JDK中的流来遍历key和value
map.entrySet().stream().forEach(
entry -> System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue())
);
}
本文主要给大家介绍了Java遍历Map集合的四种方式:使用for-each循环、使用迭代器、使用Lambda表达式和使用Stream API。每种方式都有其适用的场景。在实际开发中,可以根据具体情况选择不同的方式。通过本文的介绍,相信大家已经掌握了Java遍历Map集合的各种方法,并能够在实际开发中灵活运用。
欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。