遍历HashMap从根本上来说有两种方式:
第一 EntryKey()方式遍历
第二 KeySet()方式遍历
从网上找了好多的资料说是两者遍历有效率差别,做了下验证有差别 但是可能是测试数据量不够 看不出明显差距
希望大牛能指导一二
package com.biq;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class TestHashMap {
/**
* 遍历HashMap时entrySet()与KeySet()方式遍历效能只差
*/
public static Map<String, Integer> map=null;
public static Iterator iter=null;
private TestHashMap() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
map=new HashMap<String, Integer>();
//向map集合添加元素
for (int i = 0; i < 1000000; i++) {
map.put("测试"+i, i);
}
TestHashMap.testKeySet(map);
//TestHashMap.testEntrySet(map);
}
//keyset测试方法
public static void testKeySet(Map<String, Integer> map){
System.out.println("--------------------KeySet遍历-----------");
iter=map.keySet().iterator();
Long start2=Calendar.getInstance().getTimeInMillis();
while(iter.hasNext()){
// String key=(String) iter.next();
// Integer value=map.get(key);
System.out.println(map.get(iter.next()));
}
long end2=Calendar.getInstance().getTimeInMillis();
System.out.println("KeySet的时间"+(end2-start2));
}
//entrySet测试方法
public static void testEntrySet(Map<String, Integer> map){
System.out.println("--------------------entrySet遍历-----------");
iter=map.entrySet().iterator();
//记录开始的时间
Long start1=Calendar.getInstance().getTimeInMillis();
while(iter.hasNext()){
@SuppressWarnings("rawtypes")
Map.Entry temp=(Map.Entry) iter.next();
//String key=(String) temp.getKey();
//Integer value=(Integer) temp.getValue();
System.out.println(temp.getValue());
}
long end1=Calendar.getInstance().getTimeInMillis();
System.out.println("EntrySet的时间"+(end1-start1));
}
}