Java中Map的三种简单遍历方式

昨天面试的时候被问到了,答出来了三种常用的,其他的暂时还没有用到过也不太记得了。

先准备一个简单的map。

Map<String, Integer> map = new HashMap<>();
map.put("John", 35);
map.put("Bob", 40);
map.put("Alice", 30);
map.put("tom", 45);
map.put("Jerry", 50);

第一种方法:对 map 的 entrySet 遍历,简单实用,应该大家都是这样子用的。

// 使用entrySet遍历
for (Map.Entry<String, Integer> entry : map.entrySet()) {
     System.out.println(entry);
}

第二种方法:使用迭代器遍历。

// 迭代器遍历
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
    Map.Entry<String, Integer> next = iterator.next();
    System.out.println(next);
}

第三种方法:对 keySet 进行 for 循环,使用 get 查找 value 值进行遍历。

// keySet + for
for (String s1 : map.keySet()) {
    System.out.println(s1+ " = " + map.get(s1));
}

进阶:按 value 的值对Map排序

思路:Map中的数据是无序存放的,因此需要使用一个新的容器存放排序后的数据(LinkedHashMap),可以先将 map 数组转为 List,对List进行排序后插入到 LinkedHashMap中。代码如下:

// 将map的值遍历插入到mapList中,也可以直接new ArrayList<>(map.entrySet());
List<Map.Entry<String, Integer>> mapList = new ArrayList<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    mapList.add(entry);
}

// 对List中的数据进行排序
System.out.println(mapList);   
// 输出结果:[tom=45, Bob=40, Alice=30, John=35, Jerry=50]
mapList.sort(Map.Entry.comparingByValue());
System.out.println(mapList);   
// 输出结果:[Alice=30, John=35, Bob=40, tom=45, Jerry=50]

// 将List中排序后的数据插入到LinkedHashMap中
Map<String, Integer> sortedMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : mapList) {
    sortedMap.put(entry.getKey(), entry.getValue());
}

// 遍历输出
for (Map.Entry<String, Integer> stringIntegerEntry : sortedMap.entrySet()) {
    System.out.println(stringIntegerEntry.getKey() + " " + stringIntegerEntry.getValue());
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值