java 解决双重for循环效率问题
题目说明
当拥有2个表时,订单表和物品表 时,订单表(客户名称,订单ID)和物品表(订单ID,物品名称)一个客户可以购买多个物品,但是他们的订单ID是唯一的,数据库中数据以JSON字符串的形式传给你。
订单表
物品表
请输出购买最多商品的人?购买最少商品的人?和平均一个人购买多少商品。
题解
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);