map怎么遍历删除 map集合遍历的三种方式

1.起源在什么时刻应该选择什么样的遍历方式?我们必须比较这些做法来看效率。我们也看了很多文章。我们建议使用entrySet,认为entrySet查找大数据更快。今天我们就用不同的方法来遍历不同场景下键+值、键和值的区别。2.准备测试数据:HashMap1:大小为100000,key和值都是字符串...

1.起源

在什么时刻应该选择什么样的遍历方式?我们必须比较这些做法来看效率。我们也看了很多文章。我们建议使用entrySet,认为entrySet查找大数据更快。今天我们就用不同的方法来遍历不同场景下键+值、键和值的区别。

2.准备测试数据:

HashMap1:大小为100000,key和值都是字符串,key的值为1,2,3 ………1000000;

Map<String,String> ***p =new HashMap<String,String>(); String key,value; for(int i=1;i<=num;i++){ key = ""+i; value="value"+i; ***p.put(key,value); }

HashMap2:大小为100000,key和值为String,key的值为50,100,150 ……..50000000;

Map<String,String> ***p = new HashMap<String,String>(); String key,value; for(int i=1;i<=num;i++){ key=""+(i*50); value="value"+key; ***p.put(key,value);}

3.现场测试

3.1遍历键+值

1)迭代器遍历了键集。

long startTime1 =System.currentTimeMillis();Iterator<String> iter = ***p.keySet().iterator();while (iter.hasNext()){ key=iter.next(); value=***p.get(key);}long endTime1 =System.currentTimeMillis();System.out.println("第一个程序运行时间:"+(endTime1-startTime1)+"ms");

2)用于遍历的键集。

long startTime2 =System.currentTimeMillis(); for(String key2:***p.keySet()){ value=***p.get(key2); }long endTime2 =System.currentTimeMillis();System.out.println("第二个程序运行时间:"+(endTime2-startTime2)+"ms");

Iterator遍历entrySet

long startTime3=System.currentTimeMillis();Iterator<Map.Entry<String,String>> iter3 =***p.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("第三个程序运行时间:" +(endTime3-startTime3)+"ms");

4)entrySet用于遍历。

long startTime4=System.currentTimeMillis();for(Map.Entry<String,String> entry4:***p.entrySet()){ key=entry4.getKey(); value=entry4.getValue();}long endTime4 =System.currentTimeMillis();System.out.println("第四个程序运行时间:"+(endTime4-startTime4) +"ms");

3.2遍历键

1)迭代器遍历了键集。

long startTime1 =System.currentTimeMillis();Iterator<String> iter = ***p.keySet().iterator();while (iter.hasNext()){ key=iter.next();}long endTime1 =System.currentTimeMillis();System.out.println("第一个程序运行时间:"+(endTime1-startTime1)+"ms");

2)用于遍历的键集。

long startTime2 =System.currentTimeMillis();for(String key2:***p.keySet()){}long endTime2 =System.currentTimeMillis();System.out.println("第二个程序运行时间:"+(endTime2-startTime2)+"ms");

Iterator遍历entrySet

long startTime3=System.currentTimeMillis();Iterator<Map.Entry<String,String>> iter3 =***p.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用于遍历。

long startTime4=System.currentTimeMillis();for(Map.Entry<String,String> entry4:***p.entrySet()){ key=entry4.getKey();}long endTime4 =System.currentTimeMillis();System.out.println("第四个程序运行时间:"+(endTime4-startTime4) +"ms");

3.3遍历值

1)迭代器遍历了键集。

long startTime1 =System.currentTimeMillis();Iterator<String> iter = ***p.keySet().iterator();while (iter.hasNext()){ value=***p.get(iter.next());}long endTime1 =System.currentTimeMillis();System.out.println("第一个程序运行时间:"+(endTime1-startTime1)+"ms");

2)用于遍历的键集。

long startTime2 =System.currentTimeMillis();for(String key2:***p.keySet()){ value=***p.get(key2);}long endTime2 =System.currentTimeMillis();System.out.println("第二个程序运行时间:"+(endTime2-startTime2)+"ms");

Iterator遍历entrySet

long startTime3=System.currentTimeMillis();Iterator<Map.Entry<String,String>> iter3 =***p.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用于遍历。

long startTime4=System.currentTimeMillis();for(Map.Entry<String,String> entry4:***p.entrySet()){ value=entry4.getValue();}long endTime4 =System.currentTimeMillis();System.out.println("第四个程序运行时间:"+(endTime4-startTime4) +"ms");

5)迭代器遍历值

long startTime5=System.currentTimeMillis();Iterator<String> iter5=***p.values().iterator();while (iter5.hasNext()){ value=iter5.next();}long endTime5 =System.currentTimeMillis();System.out.println("第五个程序运行时间:"+(endTime5-startTime5) +"ms");

6)使用for遍历值

long startTime6=System.currentTimeMillis();for(String value6:***p.values()){}long endTime6 =System.currentTimeMillis();System.out.println("第六个程序运行时间:"+(endTime6-startTime6) +"ms");

4.时间比较

4.1遍历键+值

4.2遍历键

4.3遍历值

5.摘要

从以上时间对比来看:

1)当1)***p的键采用简单形式和复杂形式时,搜索效率不同,简单键值效率更高。

2)当数据量较大时,entrySet遍历key+value的效率高于keySet。

3)当我们只需要得到值的时候,用值来遍历效率更高。

本文来自柠檬琉璃夏投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/636858.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 07-16
下一篇 07-16

相关推荐

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信