二重循环优化

今天做了个任务,用的是二重循环,结果老大来审查代码的时候被骂了。

为什么被骂?

以为代码写的low。

废话不多说,直接看代码。

错误的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 * 给每一个新增柜员添加 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;
            }
        }
    }
}

 

正确的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 * 给每一个新增柜员添加 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作为键。提高了效率,还增加了阅读性。   

 

posted @   纯丿乱  阅读(603)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示