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);
