1、for each map.entrySet()
2、显示调用map.entrySet()的集合迭代器
3、for each map.keySet(),再调用get获取
4、for each map.entrySet(),用临时变量保存map.entrySet()
写了代码测试一下四种方法:10000000 一千万的map遍历耗时:
167ms
170ms
258ms
172ms
Map map = new HashMap(16);
for (int index = 0; index < 10000000; index ++ ){
map.put(index +"",index +"");
}
Long start = System.currentTimeMillis();
for (Map.Entry entry : map.entrySet()) {
entry.getKey();
entry.getValue();
}
System.out.println(System.currentTimeMillis() - start);
start = System.currentTimeMillis();
Iterator<Map.Entry> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = iterator.next();
entry.getKey();
entry.getValue();
}
System.out.println(System.currentTimeMillis() - start);
start = System.currentTimeMillis();
for (String key : map.keySet()) {
map.get(key);
}
System.out.println(System.currentTimeMillis() - start);
start = System.currentTimeMillis();
Set<Map.Entry> entrySet = map.entrySet();
for (Map.Entry entry : entrySet) {
entry.getKey();
entry.getValue();
}
System.out.println(System.currentTimeMillis() - start);