1、由来
我们应该在什么时刻选择什么样的遍历方式呢,必须通过实践的比较才能看到效率,也看了很多文章,大家建议使用entrySet,认为entrySet对于大数据量的查找来说,速度更快,今天我们就通过下面采用不同方法遍历key+value,key,value不同情景下的差异。
2、准备测试数据:
HashMap1:大小为1000000,key和value的值均为String,key的值为1、2、3.........1000000;
Map<String,String> map =new HashMap<String,String>(); String key,value; for(int i=1;i<=num;i++){ key = &34;+i; value=&34;+i; map.put(key,value); }
HashMap2:大小为1000000,key和value的值为String,key的值为50、100、150........50000000;
Map<String,String> map = new HashMap<String,String>(); String key,value; for(int i=1;i<=num;i++){ key=&34;+(i*50); value=&34;+key; map.put(key,value);}
3、场景测试
3.1遍历key+value
1)keySet利用Iterator遍历
long startTime1 =System.currentTimeMillis();Iterator<String> iter = map.keySet().iterator();while (iter.hasNext()){ key=iter.next(); value=map.get(key);}long endTime1 =System.currentTimeMillis();System.out.println(&34;+(endTime1-startTime1)+&34;);
2)keySet利用for遍历
map的遍历有哪些方法可用,long startTime2 =System.currentTimeMillis(); for(String key2:map.keySet()){ value=map.get(key2); }long endTime2 =System.currentTimeMillis();System.out.println(&34;+(endTime2-startTime2)+&34;);
3)entrySet利用Iterator遍历
long startTime3=System.currentTimeMillis();Iterator<Map.Entry<String,String>> iter3 =map.entrySet().iterator();Map.Entry<String,String> entry3;while (iter3.hasNext()){ entry3 = iter3.next(); key = entry3.getKey(); value=entry3.getValue();}long endTime3 =System.currentTimeMillis();System.out.println(&34; +(endTime3-startTime3)+&34;);
4)entrySet利用for遍历
long startTime4=System.currentTimeMillis();for(Map.Entry<String,String> entry4:map.entrySet()){ key=entry4.getKey(); value=entry4.getValue();}long endTime4 =System.currentTimeMillis();System.out.println(&34;+(endTime4-startTime4) +&34;);
1、这是最常见的并且在大多数情况下也是最可取的遍历方式,在键值都需要时使用。Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System。.
3.2遍历key
1)keySet利用Iterator遍历
2)keySet利用for遍历
long startTime2 =System.currentTimeMillis();for(String key2:map.keySet()){}long endTime2 =System.currentTimeMillis();System.out.println(&34;+(endTime2-startTime2)+&34;);
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(&34; +(endTime3-startTime3)+&34;);
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(&34;+(endTime4-startTime4) +&34;);
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(&34;+(endTime1-startTime1)+&34;);
2)keySet利用for遍历
long startTime2 =System.currentTimeMillis();for(String key2:map.keySet()){ value=map.get(key2);}long endTime2 =System.currentTimeMillis();System.out.println(&34;+(endTime2-startTime2)+&34;);
利用 iterator 和 Map.Entry 【方法1】稳居第一,领先 第二名差不多7s。第二名为 Eclipse (CS) collections 中的 MutableMap 位列第二,在大数据量下表现表现比较出色。指的注意的是之前在小数据量下表现。
3)entrySet利用Iterator遍历
4)entrySet利用for遍历
ava中map的常用遍历的具体方法有:一 、在for-each循环中使用entries来遍历。这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。二、 在for-each循环中遍历keys或values。如果只需要map中的键或者值。
long startTime4=System.currentTimeMillis();for(Map.Entry<String,String> entry4:map.entrySet()){ value=entry4.getValue();}long endTime4 =System.currentTimeMillis();System.out.println(&34;+(endTime4-startTime4) +&34;);
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(&34;+(endTime5-startTime5) +&34;);
6)values利用for遍历
long startTime6=System.currentTimeMillis();for(String value6:map.values()){}long endTime6 =System.currentTimeMillis();System.out.println(&34;+(endTime6-startTime6) +&34;);
4、时间对比
4.1遍历key+value
4.2遍历key
4.3遍历value
5、总结
从上面的时间比较来看:
1)map的key采用简单形式和复杂形式时,查找的效率是不同的,简单的key值效率更高
2)当数据量大的时候,采用entrySet遍历key+value的效率要高于keySet
3)当我们只需要取得value值时,采用values来遍历效率更高
来源:blog.csdn.net/zhangsify/article/details/52966094