前后台遍历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