二重循环优化
今天做了个任务,用的是二重循环,结果老大来审查代码的时候被骂了。
为什么被骂?
以为代码写的low。
废话不多说,直接看代码。
错误的代码:
/** * 给每一个新增柜员添加 bankId属性 */ private void setBankId4PbUser(List<PbUser> userList) throws Exception{ List<Network> allNetWorks = netWorkService.loadAllNetwork(""); for(Network network : allNetWorks){ for(PbUser pbUser : userList){ String bankCode = pbUser.getBank_code(); if(network.getCode().equals(bankCode)){ pbUser.setBank_id(network.getId()); pbUser.setBank_name(network.getName()); break; } } } }
正确的代码:
/** * 给每一个新增柜员添加 bankId属性 */ private void setBankId4PbUser(List<PbUser> userList) throws Exception{ List<Network> allNetWorks = netWorkService.loadAllNetwork(""); Map<String,Network> allNetWorksMap = new HashMap<String, Network>(); for(Network network : allNetWorks){ allNetWorksMap.put(network.getCode(), network); } for(PbUser pbUser : userList){ Network network = allNetWorksMap.get(pbUser.getBank_code()); if(network == null){ throw new PbException("未找到柜员"+pbUser.getUser_code()+"对应的网点"); } pbUser.setBank_id(network.getId()); pbUser.setBank_name(network.getName()); } }
测试可得: 100用户100网点的条件下,正确代码比错误代码速度快70%。
分析:这个效率提升在不再需要使用遍历去匹配,而是新创建一个Map,将code作为键。提高了效率,还增加了阅读性。
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中虽不甘心,却又畏首畏尾。