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

题目说明

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

订单表

订单ID 客户名称 A 1 B 2 C 3 … …

物品表

订单ID 物品名称 A 1 B 2 C 3 … …

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

题解

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);
经验分享 程序员 微信小程序 职场和发展