博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
论使用HashMap优化双层For循环的实际性能
阅读量:5787 次
发布时间:2019-06-18

本文共 2249 字,大约阅读时间需要 7 分钟。

当需要对两个集合进行相互操作的时候,一般需要进行双层For循环,但我们知道双层For在数量越大的时候性能影响越大

这时候我们会想到的其中一种解决方法就是利用Hashmap在查找数据的高效上来优化双层For

我利用下面的代码来模拟测试两种情况的性能:

public static void main(String[] args) {        for (int i = 0; i < 10000; i += 10) {            List
loopList1 = getLoopList(i); List
loopList2 = getLoopList(i); long loopBy2forTimes = doBy2ForLoop(loopList1, loopList2); long loopByHashMapForTimes = doByHashmapForLoop(loopList1, loopList2); System.out.println("size:" + i + ": " + loopBy2forTimes + "," + loopByHashMapForTimes); } for (int i = 10000; i < 100000; i += 10000) { List
loopList1 = getLoopList(i); List
loopList2 = getLoopList(i); long loopBy2forTimes = doBy2ForLoop(loopList1, loopList2); long loopByHashMapForTimes = doByHashmapForLoop(loopList1, loopList2); System.out.println("size:" + i + ": " + loopBy2forTimes + "," + loopByHashMapForTimes); } } private static List
getLoopList(int size) { List
list = new ArrayList<>(); for (int i = 0; i < size; i++) { list.add(String.valueOf(i)); } return list; } private static long doBy2ForLoop(List
loopList1, List
loopList2) { long startTime = System.currentTimeMillis(); for (String str1 : loopList1) { for (String str2 : loopList2) { if (str1.equals(str2)) { continue; } } } long endTime = System.currentTimeMillis(); return endTime - startTime; } private static long doByHashmapForLoop(List
loopList1, List
loopList2) { long startTime = System.currentTimeMillis(); Map
loopListMap = loopList2.stream().collect(Collectors.toMap(k -> k, Function.identity())); for (String str1 : loopList1) { String str2 = loopListMap.get(str1); } long endTime = System.currentTimeMillis(); return endTime - startTime; }

 

结果: 第一个表格为1~10000, 第二个表格为10000~100000,

 

可以看到双层For数据量越大,执行时间越长,而使用了Hashmap,纵使数据量增长到了10w,执行时间也几乎为0(3-4ms)

嘛当然我们也可以算出上述代码的双层For的时间复杂度为O((1+N)/2),而使用Hashmap的时间复杂度为O(1),也可以发现List转Map几乎不耗时间

 但是也要注意到,在数据量低(<2000)的情况下,两者没有区别,而hashmap还需要占用多余的空间

 

结论:选择哪个来遍历还是需要看具体的场景的数据量(但是数据量不清又嫌麻烦的咱大部分情况还是会用hashmap大法了233)

转载于:https://www.cnblogs.com/syui-terra/p/10163117.html

你可能感兴趣的文章
Webpack中的sourcemap以及如何在生产和开发环境中合理的设置sourcemap的类型
查看>>
做完小程序项目、老板给我加了6k薪资~
查看>>
java工程师linux命令,这篇文章就够了
查看>>
关于React生命周期的学习
查看>>
webpack雪碧图生成
查看>>
搭建智能合约开发环境Remix IDE及使用
查看>>
Spring Cloud构建微服务架构—服务消费基础
查看>>
RAC实践采坑指北
查看>>
runtime运行时 isa指针 SEL方法选择器 IMP函数指针 Method方法 runtime消息机制 runtime的使用...
查看>>
LeetCode36.有效的数独 JavaScript
查看>>
Scrapy基本用法
查看>>
PAT A1030 动态规划
查看>>
自制一个 elasticsearch-spring-boot-starter
查看>>
软件开发学习的5大技巧,你知道吗?
查看>>
【人物志】美团前端通道主席洪磊:一位产品出身、爱焊电路板的工程师
查看>>
一份关于数据科学家应该具备的技能清单
查看>>
机器学习实战_一个完整的程序(一)
查看>>
Web框架的常用架构模式(JavaScript语言)
查看>>
如何用UPA优化性能?先读懂这份报告!
查看>>
这些Java面试题必须会-----鲁迅
查看>>