精华内容
下载资源
问答
  • 多层for循环怎么优化
    千次阅读
    2021-03-08 07:06:06

    代码示例

    package com.cwl.po;

    /**

    * @program: cwl-performance-optimization

    * @description: 测试for循环-嵌套循环

    * @author: ChenWenLong

    * @create: 2019-11-22 11:27

    **/

    public class TestNestedLoop {

    // 当需要嵌套循环时 外层循环越小 性能越好

    // 例如 10*100*1000 与 1000*100*10 相互比较

    public static void main(String[] args) {

    // 测试最终结果发现当嵌套循环越大 两者相差性能比越大

    System.out.println(testOutSide());

    System.out.println(testInSide());

    }

    /**

    * 功能描述:

    * 〈测试内层循环逐步增大〉

    *

    * @params : []

    * @return : long

    * @author : cwl

    * @date : 2019/11/22 11:36

    */

    private static long testInSide() {

    long begin = System.currentTimeMillis();

    int d = 0;

    for(int a=0;a<1000;a++){

    for(int b=0;b<10000;b++){

    for (int c=0;c<100000;c++){

    d = a+b+c;

    }

    }

    }

    long end = System.currentTimeMillis();

    System.out.println(d);

    return end - begin;

    }

    /**

    * 功能描述:

    * 〈测试内层循环逐步减小〉

    *

    * @params : []

    * @return : long

    * @author : cwl

    * @date : 2019/11/22 11:37

    */

    private static long testOutSide() {

    long begin = System.currentTimeMillis();

    int d = 0;

    for(int a=0;a<100000;a++){

    for(int b=0;b<10000;b++){

    for (int c=0;c<1000;c++){

    d = a+b+c;

    }

    }

    }

    long end = System.currentTimeMillis();

    System.out.println(d);

    return end - begin;

    }

    }

    本文同步分享在 博客“cwl_java”(CSDN)。

    如有侵权,请联系 support@oschina.cn 删除。

    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    更多相关内容
  • 多层for 循环优化方法

    2020-04-21 15:16:11
    多层for 循环优化方法 demo public List<AclModuleLevelDto> roleTree(int roleId) { // 1、当前用户已分配的权限点 List<SysAcl> userAclList = sysCoreService.getCurrentUserAclList(); // 2、...
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    public class Main {
     
        public static void main(String[] args) {
            List<Student> studentList = new ArrayList<>();
            Student student = new Student(1,"小明",1);
            Student student1= new Student(2,"小红",2);
            studentList.add(student);
            studentList.add(student1);
            List<Class> classList = new ArrayList<>();
           Class cl = new Class(1,"1班");
           Class c2 = new Class(2,"2班");
            classList.add(cl);
            classList.add(c2);
            // list 转成map,map存放的是key和value的映射关系
            Map<Integer,Class> map = new HashMap<>();
            for (Class aClass : classList) {
                map.put(aClass.getClassId(),aClass);
            }
    // Map<Integer, Class> map = classList.stream().collect(Collectors.toMap(Class::getClassId, e -> e));
            List<StudentAndClass> list = new ArrayList<>();
            if(studentList.size()>0){
                for (Student studentArray : studentList) {
                    Class c1= map.get(studentArray.getClassId());
                    if(c1!=null){
                        StudentAndClass studentAndClass = new StudentAndClass();
                        studentAndClass.setClassId(studentArray.getClassId());
                        studentAndClass.setClassName(c1.getClassName());
                        studentAndClass.setId(studentArray.getId());
                        studentAndClass.setName(studentArray.getName());
                        list.add(studentAndClass);
                    }
     
                }
            }
     
     
        }

     

    多层for 循环优化方法 demo
    public List<AclModuleLevelDto> roleTree(int roleId) {
        // 1、当前用户已分配的权限点
        List<SysAcl> userAclList = sysCoreService.getCurrentUserAclList();
        // 2、当前角色分配的权限点
        List<SysAcl> roleAclList = sysCoreService.getRoleAclList(roleId);
        // 3、当前系统所有权限点
        List<AclDto> aclDtoList = Lists.newArrayList();
    
        Set<Integer> userAclIdSet = userAclList.stream().map(sysAcl -> sysAcl.getId()).collect(Collectors.toSet());
        Set<Integer> roleAclIdSet = roleAclList.stream().map(sysAcl -> sysAcl.getId()).collect(Collectors.toSet());
    
        List<SysAcl> allAclList = sysAclMapper.getAll();
        for (SysAcl acl : allAclList) {
            AclDto dto = AclDto.adapt(acl);
           //  避免多才层for循环
            if (userAclIdSet.contains(acl.getId())) {
                dto.setHasAcl(true);
            }
            if (roleAclIdSet.contains(acl.getId())) {
                dto.setChecked(true);
            }
            aclDtoList.add(dto);
        }
        return aclListToTree(aclDtoList);
    }

    软件赚钱_优米谷

    展开全文
  • 多层for循环优化

    千次阅读 2019-05-12 13:33:51
    1.6.1 找出最大周长的三角形 /*可以用穷举找出最长,三重循环。*/ for (i = 0; i ;++i) { for (j = i + 1; j ; ++j) { for (k = j + 1; k ; ++k) { len = b[i] + b[j] + b[k]; m
    • 1.6.1 找出最大周长的三角形
    /*可以用穷举找出最长,三重循环。*/
    for (i = 0; i < a;++i) {
    		for (j = i + 1; j < a; ++j) {
    			for (k = j + 1; k < a; ++k) {
    				len = b[i] + b[j] + b[k];
    				ma = max(b[i], max(b[j], b[k]));
    				ans = len - ma;
    				if (ma < ans) { z = max(z, len); }
    			}
    	}
    	}
    

    • 1.6.2 Ants(POJ No.1852)
      Description
      An army of ants walk on a horizontal pole of length l cm, each with a constant speed of 1 cm/s. When a walking ant reaches an end of the pole, it immediatelly falls off it. When two ants meet they turn back and start walking in opposite directions. We know the original positions of ants on the pole, unfortunately, we do not know the directions in which the ants are walking. Your task is to compute the earliest and the latest possible times needed for all ants to fall off the pole.
    /*2只蚂蚁相遇,把它看成相遇后还是沿原方向前行结果也是一样的*/
    for (i = 0; i < n; ++i) {
    		mint = max(mint, min(x[i], L - x[i]));
    	}
    for (i = 0; i < n; ++i) {
    		maxt = max(maxt, max(x[i], L - x[i]));
    	}
    

    • 1.6.3 抽签问题
      你的朋友提议玩一个游戏,将写有数字的n个纸片放入口袋中,你可以从口袋中抽取4次纸片,每次记下纸片上的数字后都将其放回口袋中,如果这四个数字的和为m,
      就是你赢,否则就是你的朋友赢,你挑战了好几次,结果一次也没有赢,于是撕破口袋,取出所有的纸片,检查自己是否有赢的可能性。
      请编写一个程序,判断当纸片上写的数字是K1,K2,K3,…,Kn 时,是否存在抽取四次和为m的情况,如果存在,输出Yes,若不存在,输出No。
    /*如果n在合理范围内,可以直接四重循环穷举(循环:n^4)*/ 
    bool f = false;
    	for (a = 0; a < n;++a) {
    		for (b =0; b < n;++b) {
    			for (c = 0; c < n;++c) {
    				for (d = 0; d < n;++d) {
    					if (k[a] + k[b] + k[c]+k[d]==m) {f = true;}
    				}
    		     }
    		  }
    	   }
    
    /*如果n过大,四重循环效率太慢,我们可以用二分搜索算法替换最内侧的循环*/
    //循环:n^3logn ;排序:nlogn
    bool binary_search(int *a,int n,int key) {
    	int low, high,mid;
    	bool f = false;
    	low = 0;
    	high = n;
    	while (low <= high) {
    		mid = (low + high) / 2;
    		if (key < a[mid]) { high = mid - 1; }
    		else if (key > a[mid]) { low = mid + 1; }
    		else {f = true; break;}
    	}
    	return f;
    }
    ----------
    sort(k,k+n);
    bool f = false;
    	for (a = 0; a < n;++a) {
    		for (b = 0; b < n;++b) {
    			for (c =0; c < n;++c) {
    if (binary_search(k, n, m - (k[a] + k[b] + k[c])))
                                                     { f = true;}
    		     }
    		  }
    	   }
    
    /*同样道理,我们可以尝试用二分搜索来替换内侧两重循环;(循环:n^2logn;排序:n^2logn)*/
    //先将内侧两重循环排好序
    for (i = 0; i < n; ++i) {
    		for (int j = 0; j < n;++j) {
    			kk[i*n+j] = k[i] + k[j];
    		} 
    	}
    	sort(kk,kk+n*n);
    //再来搜索
    bool f = false;
    	for (a = 0; a < n;++a) {
    		for (b = 0; b < n;++b) {
    				if (binary_search(kk,kk+n*n, m - (k[a] + k[b]))) { f = true; }        
    		  }
    	   }	
    
    展开全文
  • 主要介绍了Java for循环性能优化实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • python 多层for循环嵌套的优化方法

    万次阅读 多人点赞 2020-03-11 14:20:40
    题目:有5个长度不一的数组a1、a2、a3、a4、a5,现各从数组中取出一个数,组成...题目挺简单,看一下就明白,然后第一时间用了一堆for循环,脚本如下: a1 = [1,2,4] a2 = [2,3,4,5] a3 = [1,4,7] a4 = [3,6,7,8] a5...

    题目:有5个长度不一的数组a1、a2、a3、a4、a5,现各从数组中取出一个数,组成一个新的数组,要求从a1取出的数必须小于从a2取的数,同理从a2取出的数必须小于从a3取的数,以此类推,列出所有满足条件的数组。

    题目挺简单,看一下就明白,然后第一时间用了一堆for循环,脚本如下:

    a1 = [1,2,4]
    a2 = [2,3,4,5]
    a3 = [1,4,7]
    a4 = [3,6,7,8]
    a5 = [3,6,8,9,10]
    
    for i in a1:
        for j in a2:
            for k in a3:
                for l in a4:
                    for m in a5:
                        if i<j<k<l<m:
                            print(i,j,k,l,m)
    

    在这里插入图片描述
    输出结果没错,但是看着这一堆for循环,总感觉很不爽,一番搜索后,发现了itertools.product(A, B)这个函数,这个函数会返回A、B中的元素的笛卡尔积的元组,似乎满足条件,于是上面的脚本改成了下面的样子

    import itertools
    
    for i in itertools.product(a1,a2,a3,a4,a5):
        if i[0]<i[1]<i[2]<i[3]<i[4]:
            print(i)
    

    在这里插入图片描述

    展开全文
  • 使用HashMap优化多级嵌套循环 m层嵌套的n次的for循环的时间复杂度为O(n^m),如下所示: public class forTradition { public static void main(String[] args){ List<Student> stus = new ArrayList(); // 为stus...
  • 【编程技巧】多重for循环优化

    千次阅读 2022-05-24 22:37:46
    通过list结合map的方式降低时间复杂度,达成多层for循环优化,文中示例为即兴编写,实际编码过程中还需要根据实际业务进行参考优化。 二、示例 1.初始化数据 业务场景初步定为根据对象A和对象B的某个字
  • 多层for循环优化问题

    千次阅读 2021-11-18 10:22:04
    嵌套循环应该遵循“外小内大”的原则,当需要嵌套循环时,尽可能让外层循环越小,性能越好; 原来代码: long stratTime = System.nanoTime(); for (int i = 0; i < 10000000; i++) { for (int j = 0; j < ...
  • 主要介绍了js for循环 跳出多层循环,终止循环执行的方法,需要的朋友可以参考下
  • 在js中的for循环数组,for(vari=nums.length;i--;) 要比for(vari= 0;i<nums.length;i++) 性能提升50%以上: for(vari=nums.length;i--;) 循环消耗性能: var twoSum = function(nums, target) { for (var i = ...
  • python双重for循环优化方法。

    千次阅读 2020-08-31 14:54:06
    有些特殊需求需要用双重for循环遍历图像来操作例如下面代码 def getbinarizationimg(simg, targeth, targetw): print(simg.shape) h,w,c = simg.shape box = np.zeros((h, w),dtype=np.uint8) pole = np.zeros...
  • 多重For循环 优化

    2012-11-06 23:34:34
    多重For循环 优化
  • 方法一:for 循环--多层嵌套 box,box1,box2 = [0,1,2],[0,3,4],[0,5,6] # 0,1,2 三个盒子,数字代表球的种类 box3,box4,box5 = [0,5,6],[0,3,4],[0,1,2] # 3,4,5 三个盒子 Box = [box,box1,box2,box3,box4,box...
  • 今天小编就为大家分享一篇基于vue v-for 多层循环嵌套获取行数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 关于多层for循环迭代的效率优化问题 今天笔试的时候遇到这么一道题目 说有上面这么循环嵌套 ,问怎么优化 并说明原因。  for(int i = 0 ; i < 1000 ;i++){  for(int j = 0; i < ...
  • 多层for循环嵌套使用sql优化

    千次阅读 2020-05-16 16:54:28
    哇,已经有一年多没有写了 这来来记录一下一个小小的优化 ... 可以看出来之前代码套了3层for循环,按照每天去循环查每种票类型对应每一个省份的逻辑,从order(订单表)中依次统计对应create_time...
  • python多层for循环的跳出 用 for ... else ...语句,配合break 和 continue即可实现 例子: 下面是一个两层循环,当内层循环满足判定条件时,结束两层循环,如下所示: for i in range(3): for j in range(6): ...
  • Java提供了标签功能,在执行跳转语句,如break/continue时,... for (int i = 0; i < 100; i++) breakPoint2: for (int j = 0; j < 100; j++) breakPoint3: for (int k = 0; k < 100; k++) { //没
  • 蓝桥杯2019真题:平方和 java跳出多层for循环中的指定for循环
  • 使用方式: 标签名: for (······) { ...主要就是代码块前写上一个标签,需要跳出多层循环的地方 break 标签名。 例子(可能不是很好): flag: for (int i = 0; i <= 100; i++) { for (int j
  • 跳出多层for循环的几种方式

    千次阅读 2020-12-30 21:21:18
    跳出多层for循环(通过测试!!!) 第一种:给循环加别名(java中可以给最外层的循环加别名,直接跳出循环) public static void getFor1(int arr) { result: for (int i = 0; i < arr; i++) { //System...
  • 这两天学习了Vue.js 感觉v-for循环渲染这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。 一、简介 vue.js 的循环渲染是依赖于 v-for 指令,它能够根据 vue 的实例里面的信息,循环遍历所需数据,然后...
  • 在之前写过的程序里,循环这个东西的使用频率非常高,无论我们是实现基础C语言题目,例如打印一维数组、杨辉三角、打印九九乘法表还是实现种类繁多且适用场景不同的排序...在这篇文章里,我将对for循环进行详细的分析。
  • lamada表达式优化多层for循环速度

    千次阅读 2020-03-09 20:00:25
    相对于直接双层for循环,速度起飞 Map<String,Map<String,String>> map2= resultList.stream().collect( Collectors.toMap(s->getKeyStr(s),s->s)); dataList.forEach(c->{ if(map2.ge...
  • Java跳出多层for循环的4种方式

    千次阅读 2021-12-27 10:35:11
    方法1.退出里外循环 使用return关键字 for (int i = 0;i<10;i++){ for (int j = 0; j<10; j++) { if (i<10){ System.out.println("retuen 跳出循环"); return; } } }
  • golang该如何循环该如何循环 多层结构体多层结构体一:首先贴代码(你们大概看看就行,在看看后面的数据 你们就能理解 结构体嵌套的案例)如果是PHP就方便很多,直接数组嵌套数组就行,也就是二维数组。package ...
  • bbq: for(var j=0;j<a.length;j++){ ccc: for(var i =0;i<... //直接跳出bbq外层循环 } } } 或者: function testFor() { bbq: for(var k=0;k<a.length;k++){ console.log('444'.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,522
精华内容 17,008
关键字:

多层for循环怎么优化