本文属于原创,原文地址在:http://www.sujunqiang.com/archives/215.html

在Java的很多实际应用和程序中,我们会遇到需要对Map进行遍历的时候,在这里我总结了2种对Map进行遍历的方法,并对其中两种方法的速度性能作了对比,总结方法以及对比如下:
(一)Map的2种遍历方法
1)通过keySet

 Map map = new HashMap();
 for (Object key : map.keySet()) {
 System.out.println(map.get(key));
 }
 

2)通过entrySet

Map map = new HashMap();
 for (Entry entry : map.entrySet()) {
 System.out.println(entry.getValue());
 }

(二)两种方法的性能对比
代码如下:

 package com.bobo.show;

 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;

public class MapTest {
 public static void main(String[] args) {

Map map = new HashMap();
 for (int i = 0; i < 100; i++) {
 map.put("i", (i * 10) + "");
 }

long nanoTime = System.nanoTime();
 for (String key : map.keySet()) {
 map.get(key);
 // System.out.println(map.get(key));
 }
 nanoTime = System.nanoTime() - nanoTime;
 System.out.println("keySet:" + nanoTime);

 nanoTime = System.nanoTime();
 for (Entry entry : map.entrySet()) {
 entry.getKey();
 // System.out.println(entry.getKey());
 }
 nanoTime = System.nanoTime() - nanoTime;
 System.out.println("entrySet:" + nanoTime);

}
 }
 

过程很简单,通过计算其遍历时间,运行结果如图:

java中map的性能对比

可以看到两种方法的使用时间分别为:
keySet:178248ns
entrySet:98665ns
由于用System.currentTimeMillis()的时间都取整后为0,所以这里使用nanoTime进行计算.
从时间上,entrySet的速度是比keySet要快的,至于其中的原因还要看过源码以后才知道了.
以上比较也许还有不当的地方,希望指出不足.

本文固定链接: http://www.sujunqiang.com/archives/215.html | 苏骏强的博客