HashMap的复杂案例
时间: 2024-02-09 10:02:32 浏览: 71
以下是一个基于HashMap的复杂案例:
假设你是一家电商公司的数据分析师,你需要分析每个用户的购物行为。你需要使用HashMap来存储用户的购物记录,每个记录包括以下信息:
- 用户ID
- 购物时间
- 购买的商品名称和数量
为了方便分析,你需要实现以下功能:
1. 添加购物记录:向HashMap中添加一条购物记录,如果该用户已经有过购物记录,则将新的记录添加到该用户的历史记录中。
2. 统计用户购买次数:根据用户ID统计该用户的购买次数。
3. 统计商品销售数量:根据商品名称统计该商品的销售数量。
4. 统计每个用户的购物总金额:根据用户ID统计该用户的购物总金额。
5. 统计每个商品的销售总金额:根据商品名称统计该商品的销售总金额。
6. 打印每个用户的购物记录:根据用户ID打印该用户的所有购物记录。
7. 打印每个商品的销售记录:根据商品名称打印该商品的所有销售记录。
以下是代码实现:
```java
import java.util.*;
public class ShoppingAnalysis {
private Map<String, List<ShoppingRecord>> userRecords; // 用户购物记录
private Map<String, Integer> userPurchaseCount; // 用户购买次数
private Map<String, Integer> productSalesCount; // 商品销售数量
private Map<String, Double> userTotalAmount; // 用户购物总金额
private Map<String, Double> productTotalAmount; // 商品销售总金额
public ShoppingAnalysis() {
userRecords = new HashMap<>();
userPurchaseCount = new HashMap<>();
productSalesCount = new HashMap<>();
userTotalAmount = new HashMap<>();
productTotalAmount = new HashMap<>();
}
/**
* 添加购物记录
*/
public void addShoppingRecord(String userId, String productName, int quantity, Date purchaseTime) {
// 添加用户购物记录
List<ShoppingRecord> records = userRecords.get(userId);
if (records == null) {
records = new ArrayList<>();
userRecords.put(userId, records);
}
records.add(new ShoppingRecord(productName, quantity, purchaseTime));
// 更新用户购买次数
int count = userPurchaseCount.getOrDefault(userId, 0);
userPurchaseCount.put(userId, count + 1);
// 更新商品销售数量
int salesCount = productSalesCount.getOrDefault(productName, 0);
productSalesCount.put(productName, salesCount + quantity);
// 更新用户购物总金额
double amount = userTotalAmount.getOrDefault(userId, 0.0);
double price = getProductPrice(productName); // 假设商品价格为固定值
userTotalAmount.put(userId, amount + price * quantity);
// 更新商品销售总金额
double productAmount = productTotalAmount.getOrDefault(productName, 0.0);
productTotalAmount.put(productName, productAmount + price * quantity);
}
/**
* 根据用户ID统计购买次数
*/
public int getUserPurchaseCount(String userId) {
return userPurchaseCount.getOrDefault(userId, 0);
}
/**
* 根据商品名称统计销售数量
*/
public int getProductSalesCount(String productName) {
return productSalesCount.getOrDefault(productName, 0);
}
/**
* 根据用户ID统计购物总金额
*/
public double getUserTotalAmount(String userId) {
return userTotalAmount.getOrDefault(userId, 0.0);
}
/**
* 根据商品名称统计销售总金额
*/
public double getProductTotalAmount(String productName) {
return productTotalAmount.getOrDefault(productName, 0.0);
}
/**
* 根据用户ID打印购物记录
*/
public void printUserRecords(String userId) {
List<ShoppingRecord> records = userRecords.get(userId);
if (records != null) {
System.out.println("用户 " + userId + " 的购物记录:");
for (ShoppingRecord record : records) {
System.out.println(record);
}
}
}
/**
* 根据商品名称打印销售记录
*/
public void printProductSales(String productName) {
System.out.println("商品 " + productName + " 的销售记录:");
for (String userId : userRecords.keySet()) {
List<ShoppingRecord> records = userRecords.get(userId);
for (ShoppingRecord record : records) {
if (record.getProductName().equals(productName)) {
System.out.println(record);
}
}
}
}
/**
* 假设商品价格为固定值
*/
private double getProductPrice(String productName) {
// 在实际的电商系统中,商品价格可能需要从数据库中获取
// 这里为了简化代码,假设商品价格为固定值
return 10.0;
}
/**
* 购物记录类
*/
private static class ShoppingRecord {
private String productName;
private int quantity;
private Date purchaseTime;
public ShoppingRecord(String productName, int quantity, Date purchaseTime) {
this.productName = productName;
this.quantity = quantity;
this.purchaseTime = purchaseTime;
}
public String getProductName() {
return productName;
}
public int getQuantity() {
return quantity;
}
public Date getPurchaseTime() {
return purchaseTime;
}
@Override
public String toString() {
return "购买了 " + productName + " " + quantity + " 个,购买时间为 " + purchaseTime;
}
}
}
```
阅读全文