【编程技巧】多重for循环优化

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:4205

{}
编程技巧——多重for循环优化 目录编程技巧——多重for循环优化前言一、优化方案二、示例1.初始化数据2.双重for循环3.list结合map总结 前言 今天群友问了一个问题,多重for循环怎么优化? 然后有感而发,将平时...

编程技巧——多重for循环优化

<hr>

目录

<a href="#for_0">编程技巧——多重for循环优化</a> <a href="#_8">前言</a> <a href="#_13">一、优化方案</a> <a href="#_16">二、示例</a>

<a href="#1_17">1.初始化数据</a>    <a href="#2for_62">2.双重for循环</a>    <a href="#3listmap_80">3.list结合map</a>    <a href="#_99">总结</a>      

<hr>

前言

今天群友问了一个问题,多重for循环怎么优化? 然后有感而发,将平时编码中对于该种问题的解决方法分享出来,欢迎大家一起探讨学习!

<hr>

一、优化方案

通过list结合map的方式降低时间复杂度,达成多层for循环的优化,文中示例为即兴编写,实际编码过程中还需要根据实际业务进行参考优化。

二、示例

1.初始化数据

业务场景初步定为根据对象A和对象B的某个字段进行匹配然后更新A对象的数据。

代码如下(示例):

public class ProcessControlSkill {

   public static void main(String[] args) {
      List<ClassA> aList = new ArrayList<>();
      ClassA.ClassABuilder aBuilder = ClassA.builder();
      aBuilder.id(1).aName("1").aValue("1");
      aList.add(aBuilder.build());
      aBuilder.id(2).aName("2").aValue("2");
      aList.add(aBuilder.build());
      aBuilder.id(3).aName("3").aValue("3");
      aList.add(aBuilder.build());

      List<ClassB> bList = new ArrayList<>();
      ClassB.ClassBBuilder bBuilder = ClassB.builder();
      bBuilder.id(4).bName("1").bValue("4");
      bList.add(bBuilder.build());
      bBuilder.id(5).bName("2").bValue("5");
      bList.add(bBuilder.build());
      bBuilder.id(6).bName("3").bValue("6");
      bList.add(bBuilder.build());
   }
}

@Data
@Builder
class ClassA{
   private Integer id;
   private String aName;
   private String aValue;
}

@Data
@Builder
class ClassB{
   private Integer id;
   private String bName;
   private String bValue;
}

2.双重for循环

代码如下(示例):

      for (ClassA a : aList) {
         for (ClassB b : bList) {
            if (a.getAName().equals(b.getBName())){
               a.setAValue(b.getBValue());
            }
         }
      }
      System.out.println(aList);

运行结果(示例): 在这里插入图片描述

3.list结合map

代码如下(示例):

      Map<String, ClassB> bMap = bList.stream().collect(Collectors.toMap(ClassB::getBName, Function.identity()));
      for (ClassA a : aList) {
         ClassB b = bMap.get(a.getAName());
         if (Objects.nonNull(b)){
            a.setAValue(b.getBValue());
         }
      }
      System.out.println(aList);

运行结果(示例): 在这里插入图片描述

<hr>

总结

由示例可以看出,两种写法运行结果是一样的,但是从时间复杂度的角度来看,双重for循环的时间复杂度为n^2,list结合map的方式时间复杂度为2n=n。如果是3层,多层呢,时间复杂度又会再上一个层级,所以合理的利用map去优化多层for循环可以有效的降低时间复杂度。

原文地址:https://blog.csdn.net/weixin_42605307/article/details/124956505?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168474999716782427485144%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168474999716782427485144&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-16-124956505-null-null.142^v87^insert_down1,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/d9f622c26627414facedb0bae7fa803d

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号