本文属于原创,原文地址在:http://www.sujunqiang.com/archives/215.html
在Java的很多实际应用和程序中,我们会遇到需要对Map进行遍历的时候,在这里我总结了2种对Map进行遍历的方法,并对其中两种方法的速度性能作了对比,总结方法以及对比如下:
(一)Map的2种遍历方法
1)通过keySet
Map<Object, Object> map = new HashMap<Object, Object>();
for (Object key : map.keySet()) {
System.out.println(map.get(key));
}
2)通过entrySet
Map<Object, Object> map = new HashMap<Object, Object>();
for (Entry<Object, Object> 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<String, String> map = new HashMap<String, String>();
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<String, String> entry : map.entrySet()) {
entry.getKey();
// System.out.println(entry.getKey());
}
nanoTime = System.nanoTime() - nanoTime;
System.out.println("entrySet:" + nanoTime);
}
}
过程很简单,通过计算其遍历时间,运行结果如图:
可以看到两种方法的使用时间分别为:
keySet:178248ns
entrySet:98665ns
由于用System.currentTimeMillis()的时间都取整后为0,所以这里使用nanoTime进行计算.
从时间上,entrySet的速度是比keySet要快的,至于其中的原因还要看过源码以后才知道了.
以上比较也许还有不当的地方,希望指出不足.
本文固定链接: http://www.sujunqiang.com/archives/215.html | 苏骏强的博客
转载于:https://blog.51cto.com/showtimes/1147519