常见开发问题:双重for循环遍历优化

白色玫瑰 程序猿

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

{}
双重for循环优化方案
  我们在开发中常会遇到需要双重for循环遍历的场景,但是从时间复杂度来看如果数据量大的情况下效率极低。 时间复杂度(n的平方)


  分享一下对应的解决方案,用map,时间复杂度为n

第一步,创建要你要检索的集合List

第二步,把要筛选的信息写成map集合

第三步,遍历List,用map.get(key)来实现检索

就是这么简单!!!!

//案例代码:思路
//举例:
//1.List信息数据 List<deviceInfoDTO>deviceInfoDTOList
//2.检索条件List<String> nameList的一个名称数组
 
//第一步:把被检测的List存放到HashMap里面,key用被检索名称,value可以是对象也可以是其他
//这里统计一下该名称下面的信息条数
      Map<String, Integer> nameMap = Maps.newHashMap();
      deviceInfoDTOList.forEach(deviceInfoDTO -> {
         Integer counts = nameMap.get(deviceInfoDTO.getDeviceName());
         nameMap.put(deviceInfoDTO.getDeviceName(), counts == null ? 1 : ++counts);
      });

//第二步,
//1.创建一个新的  List<deviceInfoDTO>deviceInfoDTOList 存放数据
//2.遍历名称数组,获取你想要检索的name下面的value值
      List<deviceInfoDTO> deviceInfoDTONewList =new ArrayList<>();
      nameList.foreach(name->{
         deviceInfoDTONewList.add(nameMap.get(name))

      });



//以上就是双重for循环用map和list的优化方案。
//双重for就是先遍历被检索信息里面再遍历检索条件。然后对比再把对比后的信息存放到新数组里面。
//双重for循环效率是n的平方,数据二十几条就开始慢起来
//所以一般用map优化,缺点是不可检索重复的数据,可以替换成其他可以重复的容器来存放

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

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

最新评论

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

湘ICP备2021009447号