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));
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章