提起java中map的遍历,很多人第一反应还是: for (map.entry<k,v> entry : map.entryset()) 。但其实map遍历藏着多种玩法,有的优雅简洁,有的性能拉满,今天咱们盘一盘这些进阶偏基础的遍历方式,告别重复又臃肿的代码~
一、先搞懂:map遍历的核心目标
遍历map本质是获取「键(key)」、「值(value)」或「键值对(entry)」,不同场景对应不同遍历方式,先上基础准备代码:
import java.util.hashmap;
import java.util.map;
public class maptraversaldemo {
public static void main(string[] args) {
map<string, integer> fruitprice = new hashmap<>();
fruitprice.put("苹果", 10);
fruitprice.put("香蕉", 5);
fruitprice.put("橙子", 8);
// 各种遍历方式写在这里~
}
}
二、几种遍历方式的对比
1. 传统entryset遍历(最通用)
这是最基础也最常用的方式,支持同时获取键和值,兼容所有java版本:
// 方式1:普通for循环+entryset
for (map.entry<string, integer> entry : fruitprice.entryset()) {
string key = entry.getkey();
integer value = entry.getvalue();
system.out.println(key + ":" + value + "元");
}
2. lambda表达式遍历(java 8+,极简)
java 8引入的foreach+lambda,一行代码搞定,告别冗余:
// 方式2:lambda+foreach fruitprice.foreach((key, value) -> system.out.println(key + ":" + value + "元"));
3. 只遍历key/value(按需选择)
如果只需要键或值,不用遍历entryset,直接针对性获取:
// 只遍历key
for (string key : fruitprice.keyset()) {
system.out.println("水果:" + key);
}
// 只遍历value
for (integer value : fruitprice.values()) {
system.out.println("价格:" + value + "元");
}
4. 迭代器遍历(支持删除元素)
如果遍历过程中需要删除元素,迭代器是安全选择(foreach遍历删除会抛异常):
// 方式4:迭代器遍历(支持删除)
iterator<map.entry<string, integer>> iterator = fruitprice.entryset().iterator();
while (iterator.hasnext()) {
map.entry<string, integer> entry = iterator.next();
if (entry.getvalue() < 8) {
iterator.remove(); // 安全删除价格低于8的水果
}
}
system.out.println("删除后的map:" + fruitprice);
三、避坑提醒
1. 遍历过程中修改map(如put/remove):除了迭代器的remove方法,其他方式可能触发 concurrentmodificationexception ;
2. 性能优先级:entryset遍历 > 分别遍历key+getvalue(后者会重复查询map);
3. lambda遍历虽然简洁,但无法在内部使用break/continue终止遍历。
到此这篇关于java中map的五种遍历方式实现与对比的文章就介绍到这了,更多相关java map遍历内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论