二重循环优化

Posted 纯丿乱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二重循环优化相关的知识,希望对你有一定的参考价值。

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

为什么被骂?

以为代码写的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作为键。提高了效率,还增加了阅读性。   

 

以上是关于二重循环优化的主要内容,如果未能解决你的问题,请参考以下文章

java的二重循环代码样例

C#/.NET6期01C#基础11嵌套循环或者叫二重循环continuebreak

C#/.NET6期01C#基础11嵌套循环或者叫二重循环continuebreak

C#/.NET6期01C#基础11嵌套循环或者叫二重循环continuebreak

二重循环之打印图形例解

循环结构进阶(二重循环)和冒泡排序