使用Map对于两层for循环的一个优化

使用Map的get方法来对某些情形下的多重for循环进行优化。

优化前代码

List<Map<String, Object>> result = new ArrayList<>();
List<Map<String,Object>> result1 = new ArrayList<>();
List<Map<String,Object>> result2 = new ArrayList<>();
result1 = CITService.queryComplianIndexLastDay();
result2 = CITService.queryComplianIndexNowDay();

        for(int i = 0; i < result2.size(); i++){
            Map<String,Object> timeNow=new HashMap<>();
            timeNow.put("index_order",result2.get(i).get("index_order"));
            timeNow.put("ID",result2.get(i).get("ID"));
            timeNow.put("index_value",result2.get(i).get("index_value"));
            timeNow.put("index_name",result2.get(i).get("index_name"));
            timeNow.put("index_id",result2.get(i).get("index_id"));
       for (int m = 0; m<result1.size();m++){
       if(result2.get(i).get("index_id").equals(result1.get(m).get("index_id"))){
          timeNow.put("compare_value",Math.round(Double.parseDouble(result2.get(i).get("index_value") + "")/Double.parseDouble(result1.get(m).get("index_value") + "")* 100) / 100.00 );
    }
}

没有优化前通过两层for循环来匹配result1和result2的index_id相等才会对它们进行index_value的计算。这种方法效率是很低下的,如果数据量一大即会崩溃。


优化后代码

List<Map<String, Object>> result = new ArrayList<>();
List<Map<String,Object>> result1 = new ArrayList<>();
List<Map<String,Object>> result2 = new ArrayList<>();
Map<Object,Map> map=new HashMap<>();
for(int j=0;j<result1.size();j++){
     map.put(result1.get(j).get("index_id"),result1.get(j));
}
for(int i = 0; i < result2.size(); i++){
    Map<String,Object> timeNow=new HashMap<>();
    timeNow.put("index_order",result2.get(i).get("index_order"));
    timeNow.put("ID",result2.get(i).get("ID"));
    timeNow.put("index_value",result2.get(i).get("index_value"));
    timeNow.put("index_name",result2.get(i).get("index_name"));
    timeNow.put("index_id",result2.get(i).get("index_id"));
if(map.get(result2.get(i).get("index_id")) !=null){
        timeNow.put("compare_value",Math.round(Double.parseDouble(result2.get(i).get("index_value") + "")/Double.parseDouble(map.get(result2.get(i).get("index_id")).get("index_value")+ "")* 100) / 100.00 );
    }

    result.add(timeNow);
}


这个方法可以节约百分之八十的效率。这个效率提升在不再需要使用遍历去匹配 result1 result2 index_id 相等再进行 index_value 的计算。而是新创建一个 Map result1 中每个元素即每一条数据中的 index_id 作为其键,然后整个元素又作为和这个键对应的值。然后在 for 循环中直接调用 map.get result2.get(i).get(“index_id”) . 如果在 result1 中有 index_id 等于 result2.get(i).get(“index_id”) 则会直接被查出值即整个元素,最后再调用就好。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值