1、由来
在什么样的时机选择什么样的扫描方法好呢? 只有通过实践比较,才能看到效率。 另外,我还读了很多文章。 建议使用entrySet。 entrySet在检索大数据量方面被认为是更快的。 今天,我们将通过以下方法来扫描关键值、关键值、值在不同情况下的差异:
2、准备测试数据:
HashMap1:大小为1000000,key和值都是字符串,key的值为1、2、3……1000000;映射,字符串映射=新海量映射字符串,字符串(;
字串键,值;
for (英寸=1; I=数字; I ) {2}
key='' i;
值='值' I;
映射(密钥,值);
(}HashMap2)大小为1000000,关键点和值为字符串,关键点值为50、100、150……5000000;
映射,字符串映射=新海量映射字符串,字符串(;
字串键,值;
for (英寸=1; I=数字; I ) {2}
' (I * 50;
值='值'键;
映射(密钥,值);
{1}
3、场景测试
3.1遍历key+value
1 (密钥集利用迭代器进行遍历长开始时间1=system.current time millis (;
迭代器字符串迭代器=映射.关键字() .迭代器);
wile(Iter.Hasnext () ) ) ) )。
key=iter.next (;
值=地图. get (密钥;
}
longen dtime1=system.current time millis (;
System.out.println (第一个程序的执行时间(() (结束时间1 -开始时间1 ) )毫秒) ); 2 ) keySet利用for遍历
长开始时间2=system.current time millis (;
for (字符串密钥2:映射.密钥集) ) )
值=地图. get (密钥2;
}
longen dtime2=system.current time millis (;
system.out.println(2 (第二个程序的执行时间(() (结束时间2 -开始时间2 ) )毫秒) ); 3 ) entrySet利用迭代器遍历
长开始时间3=system.current time millis (;
迭代器地图.条目字符串,字符串迭代器3=地图.迭代器() .迭代器);
地图入口串,字符串入口3;
wile(Iter3.Hasnext () ) ) ) ) ) ) ) )。
进入3=进入3 .下一个(;
key=entry3.getKey (;
值=条目3.getvalue (;
}
长时间3=系统.当前时间millis (;
system.out.println(3 (第三个程序的执行时间(() (结束时间3 -开始时间3 ) )毫秒) ); 4 ) entrySet利用for遍历
长开始时间4=system.current time millis (;
for (地图入口字符串,字符串入口4:地图入口() )。
key=entry4.getKey (;
值=条目4.getvalue (;
}
长时间4=系统.当前时间millis (;
system.out.println(4 (第四个程序的执行时间(() (结束时间4 -开始时间4 ) )毫秒) );
right">3.2遍历key1)keySet利用Iterator遍历
long startTime1 =System.currentTimeMillis(); Iterator<String> iter = map.keySet().iterator(); while (iter.hasNext()){ key=iter.next(); } long endTime1 =System.currentTimeMillis(); System.out.println("第一个程序运行时间:"+(endTime1-startTime1)+"ms");2)keySet利用for遍历
long startTime2 =System.currentTimeMillis(); for(String key2:map.keySet()){ } long endTime2 =System.currentTimeMillis(); System.out.println("第二个程序运行时间:"+(endTime2-startTime2)+"ms");3)entrySet利用Iterator遍历
long startTime3=System.currentTimeMillis(); Iterator<Map.Entry<String,String>> iter3 =map.entrySet().iterator(); Map.Entry<String,String> entry3; while (iter3.hasNext()){ key = iter3.next().getKey(); } long endTime3 =System.currentTimeMillis(); System.out.println("第三个程序运行时间:" +(endTime3-startTime3)+"ms");4)entrySet利用for遍历
long startTime4=System.currentTimeMillis(); for(Map.Entry<String,String> entry4:map.entrySet()){ key=entry4.getKey(); } long endTime4 =System.currentTimeMillis(); System.out.println("第四个程序运行时间:"+(endTime4-startTime4) +"ms");3.3遍历value
1)keySet利用Iterator遍历
long startTime1 =System.currentTimeMillis(); Iterator<String> iter = map.keySet().iterator(); while (iter.hasNext()){ value=map.get(iter.next()); } long endTime1 =System.currentTimeMillis(); System.out.println("第一个程序运行时间:"+(endTime1-startTime1)+"ms");2)keySet利用for遍历
long startTime2 =System.currentTimeMillis(); for(String key2:map.keySet()){ value=map.get(key2); } long endTime2 =System.currentTimeMillis(); System.out.println("第二个程序运行时间:"+(endTime2-startTime2)+"ms");3)entrySet利用Iterator遍历
long startTime3=System.currentTimeMillis(); Iterator<Map.Entry<String,String>> iter3 =map.entrySet().iterator(); Map.Entry<String,String> entry3; while (iter3.hasNext()){ value=iter3.next().getValue(); } long endTime3 =System.currentTimeMillis(); System.out.println("第三个程序运行时间:" +(endTime3-startTime3)+"ms");4)entrySet利用for遍历
long startTime4=System.currentTimeMillis(); for(Map.Entry<String,String> entry4:map.entrySet()){ value=entry4.getValue(); } long endTime4 =System.currentTimeMillis(); System.out.println("第四个程序运行时间:"+(endTime4-startTime4) +"ms");5)values利用iterator遍历
long startTime5=System.currentTimeMillis(); Iterator<String> iter5=map.values().iterator(); while (iter5.hasNext()){ value=iter5.next(); } long endTime5 =System.currentTimeMillis(); System.out.println("第五个程序运行时间:"+(endTime5-startTime5) +"ms");6)values利用for遍历
long startTime6=System.currentTimeMillis(); for(String value6:map.values()){ } long endTime6 =System.currentTimeMillis(); System.out.println("第六个程序运行时间:"+(endTime6-startTime6) +"ms");4、时间对比
4.1遍历key+value
4.2遍历key
4.3遍历value
5、总结
从上面的时间比较来看:
1)map的key采用简单形式和复杂形式时,查找的效率是不同的,简单的key值效率更高
2)当数据量大的时候,采用entrySet遍历key+value的效率要高于keySet
3)当我们只需要取得value值时,采用values来遍历效率更高