java 上下级组装,性能问题

需求,省市上下两级,组装成功一个json对象: 常规做法一:双重for循环,如果省有10个,市有10个,那么时间复杂度是100

 //省级 直辖市
        List<BaseRegion> provincialList = regionDao.getProvince();
        //市级,区级
        List<BaseRegion> municipalList = regionDao.getCity();

        for (BaseRegion region : provincialList) {
            //添加省级 直辖市
            RegionResDto regionResDto = new RegionResDto();
            regionResDto.setId(region.getId());
            regionResDto.setCode(region.getCode());
            regionResDto.setName(region.getName());

            List<RegionResDto> municipal = new ArrayList<>();
            for (BaseRegion baseRegion : municipalList) {
                //添加市级,区级
                if (baseRegion.getParentId().equals(region.getId())) {
                    RegionResDto childResDto = new RegionResDto();
                    childResDto.setId(baseRegion.getId());
                    childResDto.setCode(baseRegion.getCode());
                    childResDto.setName(baseRegion.getName());
                    municipal.add(childResDto);
                    regionResDto.setChildren(municipal);
                }
            }

接下来另一种思路,第一次遍历,就把市级子类集合,存入map中,父id为key,同样省和市都为10的话,复杂度为20;

 

       //省级 直辖市
        List<BaseRegion> provincialList = regionDao.getProvince();
        //市级,区级
        List<BaseRegion> municipalList = regionDao.getCity();

        Map<Long, List<RegionResDto>> childListMap = new HashMap<>();

        for (BaseRegion baseRegion : municipalList) {
            List<RegionResDto> regionList = childListMap.get(baseRegion.getParentId());
            if (regionList == null) {
                regionList = new ArrayList<>();
            }
            RegionResDto childResDto = new RegionResDto();
            BeanUtils.copyProperties(baseRegion, childResDto);
            regionList.add(childResDto);
            childListMap.put(baseRegion.getParentId(), regionList);
        }

        for (BaseRegion region : provincialList) {
            //添加省级 直辖市
            RegionResDto regionResDto = new RegionResDto();
            BeanUtils.copyProperties(region, regionResDto);
            List<RegionResDto> regionList = childListMap.get(region.getId());
            regionResDto.setChildren(regionList);
            result.add(regionResDto);
            //存入缓存
            JedisUtils.lpush(key, JsonUtils.objectToJson(regionResDto));
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值