我是靠谱客的博主 唠叨龙猫,最近开发中收集的这篇文章主要介绍关于for循环嵌套for循环的优化问题每天记录开发中的一个小问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

每天记录开发中的一个小问题

对于for循环的嵌套问题 我们常见就是这样:

for (int i = 0; i < 1000; i++){
    for (int j = 0; j < 100; j++){
        for (int k = 0; k < 10; k++){
    	system.out.println(i+"====="+j+"====="+k);
    	 }
    }
}

从上例的代码来看,我们常见的写法通常是利用if(){}break;continue来减少循环的次数

或者说在可以满足实际业务发展的情况之下可以将循环次数少的for循环放到外面,这样也可以减

少循环的次数

但是这些都不是我所思考的方向,我们不妨从以下几个点着重思考的方向:、

  • 循环变量 i、j 、k 的实例化;
  • 循环变量 i、j 、k 的初始化;
  • 循环变量 i、j 、k 的自增(其实就是循环次数);
  • 循环变量 i、j 、k 的比较;
变量实例化(次数)初始化(次数)比较(其实就是循环次数)自增(次数)
i1110001000
j100010001000 * 1001000 * 100
K1000 * 1001000 * 1001000 * 100 * 1010 * 100 * 1000

代码测试(不同电脑配置测试速度也不同):

        public static void main(String[] args) {

        long startA = System.nanoTime();
        for(int i = 0;i < 1000;i++){
            for(int j = 0;j < 100;j++){
                for(int k = 0; k < 10;k++){
                    System.out.println("如果有一天,你还会选者学Java吗?");
                }
            }
        }
        System.out.println("原始代码耗时#"+(System.nanoTime() - startA));
    }
测试次数耗时
1原始代码耗时: 2908737641
2原始代码耗时:2790575343
3原始代码耗时: 2643477965
4原始代码耗时: 2877696520
5原始代码耗时: 2627082670

对于以上代码的我们可以给出两种优化方案:

  1. 如上所述 利用if(){}break;continue来减少循环的次数或者说在可以满足实际业务发展的情况之下可以将循环次数少的for循环放到外面,这样也可以减少实例化次数、初始化次数、比较次数、自增次数。
    代码如下:
for (int i = 0; i < 10; i++){
    for (int j = 0; j < 100; j++){
        for (int k = 0; k < 1000; k++){
    	system.out.println(i+"====="+j+"====="+k);
    	 }
    }
}
变量实例化(次数)初始化(次数)比较(其实就是循环次数)自增(次数)
i111010
j101010 * 10010*100
K10* 10010 * 10010 * 100 * 100010 * 100 * 1000

代码测试(不同电脑配置测试速度也不同):

      public static void main(String[] args) {

        long startA = System.nanoTime();
        for(int i = 0;i < 10;i++){
            for(int j = 0;j < 100;j++){
                for(int k = 0; k < 1000;k++){
                    System.out.println("如果有一天,你还会选者学Java吗?");
                }
            }
        }
        System.out.println("方案一代码耗时:"+(System.nanoTime() - startA));
    }
测试次数耗时
1方案一代码耗时: 2581724052
2方案一代码耗时:2702852811
3方案一代码耗时: 2470141709
4方案一代码耗时: 2719785205
5方案一代码耗时: 2438990457
  1. 该方案在方案一的基础上,将循环变量的实例化放到循环外,这样可以进一步减少相关循环变量的实例化次数。
    代码如下:
int i,j,k;
for ( i = 0; i < 10; i++){
    for ( j = 0; j < 100; j++){
        for ( k = 0; k < 1000; k++){
    	system.out.println(i+"====="+j+"====="+k);
    	 }
    }
}
变量实例化(次数)初始化(次数)比较(其实就是循环次数)自增(次数)
i111010
j11010 * 10010*100
K1100 * 1010 * 100 * 100010 * 100 * 1000

代码测试(不同电脑配置测试速度也不同):

       public static void main(String[] args) {

        int i, j, k;
        long startA = System.nanoTime();
        for (i = 0; i < 10; i++) {
            for (j = 0; j < 100; j++) {
                for (k = 0; k < 1000; k++) {
                    System.out.println("如果有一天,你还会选者学Java吗?");
                }
            }
        }
        System.out.println("方案二代码耗时:" + (System.nanoTime() - startA));
    }
测试次数耗时
1方案二代码耗时: 2545532181
2方案二代码耗时:2696157017
3方案二代码耗时: 2423767047
4方案二代码耗时: 2492118852
5方案二代码耗时: 2518746648
以上就是我们for循环的优化问题,下面我们把三次的运行结果综合到一起:
测试次数原始代码耗时方案一代码耗时方案二代码耗时
1原始代码耗时: 2908737641方案一代码耗时: 2581724052方案二代码耗时:2545532181
2原始代码耗时:2790575343方案一代码耗时:2702852811方案二代码耗时:2696157017
3原始代码耗时: 2643477965方案一代码耗时: 2470141709方案二代码耗时: 2423767047
4原始代码耗时: 2877696520方案一代码耗时: 2719785205方案二代码耗时: 2492118852
5原始代码耗时: 2627082670方案一代码耗时: 2438990450方案二代码耗时: 2418746648

在嵌套For循环中,将循环次数多的循环放在内侧,循环次数少的循环放在外侧,其性能会提高;减少循环变量的实例化,其性能也会提高。从测试数据可知,对于这两种优化方案或者说思考方式,如果在循环次数较少的情况下,其运行效果区别不大;但在循环次数较多的情况下,其效果就比较明显了。

最后

以上就是唠叨龙猫为你收集整理的关于for循环嵌套for循环的优化问题每天记录开发中的一个小问题的全部内容,希望文章能够帮你解决关于for循环嵌套for循环的优化问题每天记录开发中的一个小问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部