java 解决双重for循环效率问题

解决双重for循环效率问题

题目说明

当拥有2个表时,订单表物品表 时,订单表(客户名称,订单ID)和物品表(订单ID,物品名称)一个客户可以购买多个物品,但是他们的订单ID是唯一的,数据库中数据以JSON字符串的形式传给你。

订单表

订单ID客户名称
A1
B2
C3

物品表

订单ID物品名称
A1
B2
C3

请输出购买最多商品的人?购买最少商品的人?和平均一个人购买多少商品。

题解

1.解决思路,使用映射关系,提取出关键信息进行两表关联。
客户名称 ↔ 订单ID
订单ID ↔ 物品名称
2.使得 订单ID作为唯一性属性进行映射对应。
3.使用Map集合类型代替双重循环提高效率

	/** * 提供String orderJSON = “”; 存放订单JSON * 提供String commodityJSON = “”; 存放商品JSON */
	Map<String,String> orderMap = new HashMap();
	Map<String,Integer> commodity = new HashMap();

	JSONArray orderJsonArray = JSON.parseArray(orderJSON);
	for(int i = 0;i<orderJsonArray .size();i++){ 
		String orderStr = orderJsonArray.getString(i);
		JSONObject jsonObject = JSONArray.parseObject(orderStr);
		String customerName = jsonObject.getString("CustomerName");
		String orderID = jsonObject.getString("OrderID");
		orderMap.put(customerName,orderID);
	}

	JSONArray commodityJsonArray = JSON.parseArray(commodityJSON);
	for(int i = 0;i<commodityJsonArray .size();i++){ 
		String commodityStr = commodityJsonArray.getString(i);
		JSONObject jsonObject = JSONArryay.parseObject(commodityStr);
		String orderID = jsonObject.getString("OrderID");
		String commodityName = jsonObject.getString("CommodityName");
		if(commodity.get(orderID)==null){ 
			commodity.put(orderID,1);
		}else{ 
			commodity.put(orderID,commodity.get(orderID)+1);
		}
	}

	String maxStr = "";
	String minStr = "";
	int sum = 0;
	int max = 0;
	int min = commodity.size()/orderMap.size();
	Iterator<Map.Entry<String, Integer>> iterator = commodity.entrySet().iterator();
	while (iterator.hasNext()) { 
		Map.Entry<String, Integer> entry = iterator.next();
		//System.out.println(entry.getKey() + " " + entry.getValue());
		sum += entry.getValue();
		if(entry.getValue()>max()){ 
			max = entry.getValue();
			maxStr = orderMap.get(entry.getKey());
		}
		if(entry.getValue()<=min()){ 
			min = entry.getValue();
			minStr = orderMap.get(entry.getKey());
		}
	}
	System.out.println("平均一个用户买物品数为 : "+sum/commodity.size());
	System.out.println("购买最多的客户是 : "+maxStr+" 购买数量为:"+max);
	System.out.println("购买最少的客户是 : "+minStr+" 购买数量为:"+min);
	
    原文作者:一只小小狗
    原文地址: https://blog.csdn.net/jj89929665/article/details/118932921
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞