常见开发问题:双重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优化,缺点是不可检索重复的数据,可以替换成其他可以重复的容器来存放

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉掣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值