首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java HashMap遍历:KeySet、EntrySet、迭代器与Lambda表达式

Java HashMap遍历:KeySet、EntrySet、迭代器与Lambda表达式

原创
作者头像
Yeats_Liao
发布2024-12-30 14:09:01
发布2024-12-30 14:09:01
1K0
举报

在 Java 编程中,HashMap 是常用数据结构,用于存储键值对。实际开发中,高效灵活遍历是核心技巧。本文将深入探讨四种遍历 HashMap 的方法(基于 KeySet、EntrySet、Iterator、Lambda 表达式)并对比差异和适用场景

1. KeySet遍历法

原理:keySet()返回 HashMap 键的集合视图(HashSet 实现),遍历时先取键再用 map.get(key)取对应值。

特点:需两次调用,适用于只处理键的情况

代码语言:java
复制
Map<String, Integer> map = new HashMap<>();
// ...填充map数据...

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

2. EntrySet遍历法

原理:entrySet()返回包含 HashMap 键值对的集合视图(HashSet 实现),元素为 Map.Entry 对象,可通过.getKey()和.getValue()获取键值。

特点:一次性获取键值对信息,效率高,是最推荐的遍历方式。

代码语言:java
复制
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println("Key: " + key + ", Value: " + value);
}

3. 迭代器遍历法

原理:通过调用 iterator()或基于 KeySet/EntrySet 的 iterator()方法获取迭代器遍历,能提供更多控制如删除当前元素。

。特点:具与 EntrySet 相似功能及迭代器灵活性,支持 remove()方法.

代码语言:java
复制
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
    Map.Entry<String, Integer> entry = iterator.next();
    // 同样可以获取键值对
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}

4. Lambda表达式遍历法(Java 8+)

原理:利用Java 8引入的Stream API和Consumer接口,通过forEach()方法遍历HashMap,并使用lambda表达式来处理键值对。

特点:代码简洁高效,易于阅读和编写,能够无缝衔接其他流式操作(filter、map、reduce等)。但这种方式并不支持在遍历过程中修改原HashMap,因为修改会导致并发修改异常。

代码语言:java
复制
map.forEach((key, value) -> {
    System.out.println("Key: " + key + ", Value: " + value);
});

5. 区别总结

  • keySet 遍历:用于仅遍历键取对应值,不修改值时适用。
  • entrySet 遍历:需同时操作键值或进行键值对复杂操作时适用。
  • 迭代器遍历:控制能力强,可删除元素,适用于灵活性场景。
  • Lambda 表达式遍历:现代 Java 提倡简洁高效,适合简单遍历并结合 Stream API 进行复杂流式处理。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. KeySet遍历法
  • 2. EntrySet遍历法
  • 3. 迭代器遍历法
  • 4. Lambda表达式遍历法(Java 8+)
  • 5. 区别总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档