转载:http://cgs1999.iteye.com/blog/1596671

1、案例描述

某日,在JavaEye上看到一道面试题,题目是这样的:请对以下的代码进行优化

for (int i = 0; i < 1000; i++)for (int j = 0; j < 100; j++)for (int k = 0; k < 10; k++)testFunction (i, j, k);

2、案例分析

从上述代码案例可以看出,不论如何优化,testFunction()执行的次数都是相同的,该部分是不存在优化的可能。那么优化只能从循环变量i,j,k的实例化、初始化、比较、自增等耗时方面来进行分析。首先,分析原题代码循环变量在以上方面的耗时情况:

变量 实例化(次数) 初始化(次数) 比较(次数) 自增(次数)
i 1 1 1000 1000
j 1000 1000 1000*100 1000*100
k 1000*100 1000*100 1000*100*10 1000*100*10

目的: 该代码性能优化就是要尽可能地减少循环变量i、j、k的实例化、初始化、比较、自增的次数,同时不引起其他可能的耗时运算。

3、解决过程

优化方案①:

for (int i = 0; i < 10; i++)for (int j = 0; j < 100; j++)for (int k = 0; k < 1000; k++)testFunction (k, j, i);

该方案主要是将循环次数少的放在外面,循环次数多的放在里层,这样可以最大程度地减少相关循环变量的实例化次数、初始化次数等,方案耗时情况如下:

变量 实例化(次数) 初始化(次数) 比较(次数) 自增(次数)
i 1 1 10 10
j 10 10 10*100 10*100
k 10*100 10*100 10*100*1000 10*100*1000

优化方案②:

int i, j, k;
for (i = 0; i < 10; i++)for (j = 0; j < 100; j++)for (k = 0; k < 1000; k++)testFunction (k, j, i);

该方案主要是在方案①的基础上,将循环变量的实例化放在循环外,这样可以进一步减少实例化次数,耗时情况如下表:

变量 实例化(次数) 初始化(次数) 比较(次数) 自增(次数)
i 1 1 10 10
j 1 10 10*100 10*100
k 1 10*100 10*100*1000 10*100*1000

注:方案②的优势体现在若将i、j、k的数值提高更多的,其提升的效果才更明显。

4、测试代码

public class Test {public static void main(String[] args){
//      testA();
//      testB();testC();}public static void testA(){long start = System.nanoTime();for(int i = 0; i < 10; i++)for(int j = 0; j < 1000; j++)for(int k = 0; k < 10000; k++);System.out.println("testA time>>"+(System.nanoTime()-start)+"ns");}public static void testB(){long start = System.nanoTime();for(int i = 0; i < 10000; i++)for(int j = 0; j < 1000; j++)for(int k = 0; k < 10; k++);System.out.println("testB time>>"+(System.nanoTime()-start)+"ns");}public static void testC(){long start = System.nanoTime();int i, j, k;for(i = 0; i < 10; i++)for(j = 0; j < 1000; j++)for(k = 0; k < 10000; k++);System.out.println("testC time>>"+(System.nanoTime()-start)+"ns");}
}

嵌套For循环性能优化分析相关推荐

  1. 嵌套For循环性能优化

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1 案例描述 某日,在JavaEye上看到一道面试题,题目是这样的:请对以下的代码进行优化 Java ...

  2. mysql如何建立索引workbench_如何对MySQL索引进行优化分析

    为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引, ...

  3. seo html空格影响,这一对HTML标签嵌套对SEO优化的影响,居然99%的人不知道!

    最常见的A标签和H标签该如何正确嵌套?网站中几乎随处可见,HTML的标签不论你怎么使用都是可以正常解析,被浏览器完整地渲染出想要的效果,所以很少有人会关注HTML标签的嵌套规则.而在SEO优化中a标签 ...

  4. MySQL索引优化分析

    转载来源:https://www.cnblogs.com/itdragon/p/8146439.html MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学 ...

  5. 第 2 章 索引优化分析

    第 2 章 索引优化分析 1.慢 SQL 性能下降. SQL 慢.执行时间长.等待时间长的原因分析 查询语句写的烂 索引失效: 单值索引:在user表中给name属性建个索引,create index ...

  6. html 3重嵌套选项卡,这对HTML标签嵌套在SEO优化上,其实99%的人都不知道!

    如何正确嵌套常见的a和H标记?几乎在网站的任何地方,HTML标签都可以被正常解析,不管你如何使用它们.它们完全由浏览器呈现,因此很少有人会注意HTML标记的嵌套规则.在SEO优化中,标签和H标签的不恰 ...

  7. 第2章 索引优化分析

    第2章 索引优化分析 1 慢SQL 性能下降.SQL慢.执行时间长.等待时间长的原因分析 查询语句写的烂 索引失效: 单值索引:在user表中给name属性建个索引,create index idx_ ...

  8. 双目标帕累托优化_结构力学中的优化分析(3) —— 结构优化分析

    引言 上文中,我们主要介绍了优化分析的基本类型. 蒙特遇见卡罗:结构力学中的优化分析(1) -- 优化方法基本概念​zhuanlan.zhihu.com 蒙特遇见卡罗:结构力学中的优化分析(2) -- ...

  9. oracle 语法分析表,Oracle 语句优化分析说明

    Oracle 语句优化分析说明 更新时间:2009年09月17日 21:52:20   作者: Oracle 语句优化技巧,大家可以参考使用,使你的oracle运行效率更高更好. 1. ORACLE ...

最新文章

  1. Java基础之一组有用的类——生成日期和时间(TryDateFormats)
  2. SqliteHelper整理
  3. Spring Boot中表格的请求以及表格界面的显示
  4. java 中的scanner_java 中的Scanner
  5. 一杯水怎么测试_天气渐热食欲差、体质虚怎么办?每天一杯能量水——驼奶
  6. 魔域java_java序列化
  7. Mac用bootcamp安装Windows 11双系统
  8. android 自定义多边形,android自定义形状的按键实例代码
  9. 又读《孙子兵法》,谈领导力
  10. 程序员开发常用英语词汇
  11. Linux7 下Hadoop集群用户管理方案之五 安装Hadoop集群遇到的坑
  12. Jacob 操作 outlook 发邮件 遍历文件夹邮件 移动邮件
  13. 三人行新解:前辈、平辈和后辈
  14. 定时任务的多种实现——xxl-job
  15. python编程基础与数据分析_Python编程基础与数据分析
  16. php中插入word文档,word里如何插入pdf
  17. 虚拟内存与虚拟存储器的区别
  18. 抓虾 — Bloglines Plus
  19. 树莓派入门(三)之步进电机控制
  20. 相似图片搜索原理二(phash—c++实现)

热门文章

  1. 【计算机毕业设计】158企业人事管理系统
  2. 主键约束(primary key)
  3. CCF计算机软件能力认证试题练习:201912-3 化学方程式
  4. 国有六大行与农商行的实习比拼
  5. 快牙传输应用apk原理
  6. 算法笔记—02:Java实现排列组合
  7. 【宫水三叶的刷题日记】497. 非重叠矩形中的随机点(中等)
  8. 如何用内卷搞垮一个团队?
  9. Linux 安装 rundeck
  10. G-3106打印机跳纸的解决办法