前后台遍历map的方法总结

5 篇文章 0 订阅

前后台遍历map的方式总结

一、后台遍历map

Map<String, String> mapObj = new HashMap<>();

mapObj.put("001", "one");
mapObj.put("002", "two");
mapObj.put("003", "three");
mapObj.put("004", "four");

方式一:这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
for (Entry<String, String> entry : mapObj.entrySet()) {
	System.out.println("key : " + entry.getKey() + "  ||  value : " + entry.getValue());
}

结果:
key : 004  ||  value : four
key : 001  ||  value : one
key : 002  ||  value : two
key : 003  ||  value : three
方式二:在for-each循环中遍历keys或values。

如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。

for (String key : mapObj.keySet()) {
	System.out.println("key : " + key);
}

for (String value : mapObj.values()) {
	System.out.println("value : " + value);
}

结果:
key : 004
key : 001
key : 002
key : 003
value : four
value : one
value : two
value : three
方式三:使用Iterator遍历

该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。
从性能方面看,该方法类同于for-each遍历(即方法二)的性能。

使用泛型:
Iterator<Entry<String, String>> iterator = mapObj.entrySet().iterator();
	
while(iterator.hasNext()){
	Entry<String, String> entry = iterator.next();
	System.out.println("key : " + entry.getKey() + "  ||  value : " + entry.getValue());
}

不使用泛型:
Iterator iterator = mapObj.entrySet().iterator();
while(iterator.hasNext()){
	Entry entry = (Entry) iterator.next();
	String key = (String) entry.getKey();
	String value = (String) entry.getValue();
	System.out.println("key : " + entry.getKey() + "  ||  value : " + entry.getValue());
}

结果:
key : 004  ||  value : four
key : 001  ||  value : one
key : 002  ||  value : two
key : 003  ||  value : three
方式四:通过键找值遍历(效率低)

作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。

for(String key : mapObj.keySet()){
	String value = mapObj.get(key);
	System.out.println("key : " + key + "  ||  value : " + value);
}

结果:
key : 004  ||  value : four
key : 001  ||  value : one
key : 002  ||  value : two
key : 003  ||  value : three

二、前台遍历map

var map = new Map();
map.set('001', 'one');
map.set('002', 'two');
map.set('003', 'three');
方式一:使用forEach()方法
方法中单独放一个参数,只会拿到map的value值
map.forEach(function (obj) {
   console.log(obj.toString());
});

结果:
one
two
three

map.forEach(function (value, key) {
    console.log(value + ' :: ' + key);
});
结果:
注意:这个方法第一参数为value值,第二个参数为key值
one :: 001
two :: 002
three :: 003
方式二:使用for循环
for(var [key, value] of map){
    console.log(key + ' :: ' + value);
 }
 
结果:
001 :: one
002 :: two
003 :: three
方式三:使用for … of循环循环来遍历(此方法可以遍历Array、Map、Set等)
for(var x of map){
   console.log(x[0] + ":" + x[1]);
}

结果:
001 :: one
002 :: two
003 :: three
在网上搜到好多文章说使用for … in循环遍历map,自己尝试了一下,这个方法是用来遍历array集合的,不能遍历map,如下:
var arr = [];
arr.push("111");
arr.push("222");
arr.push("333");

for(var key in arr){
   console.log(key + ":" + arr[key]);
}

结果:
0:111
1:222
2:333

引用:
https://www.jb51.net/article/74089.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值