Java中遍歷Map的方法及其性能比較

本文屬於原創,原文地址在: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);

}
 }
 

過程很簡單,通過計算其遍歷時間,運行結果如圖:

java中map的性能對比

java中map的性能對比

可以看到兩種方法的使用時間分別爲:
keySet:178248ns
entrySet:98665ns
由於用System.currentTimeMillis()的時間都取整後爲0,所以這裏使用nanoTime進行計算.
從時間上,entrySet的速度是比keySet要快的,至於其中的原因還要看過源碼以後才知道了.
以上比較也許還有不當的地方,希望指出不足.

本文固定鏈接: http://www.sujunqiang.com/archives/215.html | 蘇駿強的博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章