小弟想做个购物网,可是在购物车的结构设计上碰到了麻烦。望各位大侠相助!
public class ShopCart {
private HashMap<String, Product> hashMap;\\\\\\\\\\\\商品编号,商品类的hashMap

public HashMap<String, Product> getHashMap() {
return hashMap;
} public void setHashMap(HashMap<String, Product> hashMap) {
this.hashMap = hashMap;
} @SuppressWarnings("unchecked")
public ShopCart(){
hashMap = new HashMap();
}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\其他代码省略。在购物网中 ,用户如果要购买的商品数量大于1以上,那使用hashMap并没有办法表示,如果在Product类中增加一个数量的属性那缺陷就太大了,最好是有什么数据结构能直接表示的?小弟觉得在ShopCart里面弄个内部类比较好。不知道做过购物网的朋友是怎么设计它的?

解决方案 »

  1.   

    之前做过,但我用的数据结构是:HashMap <int, int>。第一个int类型储存的是商品的Id号,唯一的;第二个int类型可以用来储存对应商品的数量。这样就可以实现楼主想要的结果了。
      

  2.   

    package com.shopping.impl;import java.util.Collections;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;import com.shopping.cart.Cart;
    import com.shopping.pojo.ProductItemVO;
    import com.shopping.pojo.ProductVO;
    //购物车
    public class CartImpl implements Cart {

    private Map<String, ProductItemVO> cart = Collections.synchronizedMap(new HashMap<String, ProductItemVO>()); public void addItem(ProductVO product) {

    String key = product.getPpid();
    ProductItemVO item = cart.get(key);
    if (item == null){
    item = new ProductItemVO();
    item.setProduct(product);
    item.setQuantity(1);
    cart.put(key, item);
    }else{
    item.incrementQuantity();
    }
    }

    public void incrementQuantity(String key){
    ProductItemVO item = cart.get(key);
    item.incrementQuantity();
    }

    public void setQuantity(String key, int quantity){
    ProductItemVO item = cart.get(key);
    item.setQuantity(quantity);
    } public void clear() {
    cart.clear();
    } public void removeItem(String index) {
    cart.remove(index);
    }

    public double getTotalMoney(){
    double totalMoney = 0.0;
    for (Iterator<ProductItemVO> iter = cart.values().iterator(); iter.hasNext(); ){
    ProductItemVO item = iter.next();
    totalMoney = totalMoney + item.getTotalPrice();
    }
    return totalMoney;
    }

    public Map<String, ProductItemVO> getCart() {
    return cart;
    } public int getAmount() {
    // TODO Auto-generated method stub
    int amount = 0;
    for (Iterator<ProductItemVO> iter = cart.values().iterator(); iter.hasNext(); ){

    ProductItemVO item = iter.next();

    amount = amount + item.getQuantity();
    }

    return amount;
    } public boolean hasItem(String key) {
    // TODO Auto-generated method stub
    return cart.containsKey(key);
    }
    }
    //商品枚举
    package com.shopping.pojo;import java.io.Serializable;public class ProductItemVO implements Serializable{

    /**
     * 此商品枚举中的商品
     */
    private ProductVO product;

    /**
     * 此商品枚举中的相应商品的数量
     */
    private int quantity;

    public ProductVO getProduct() {
    return product;
    }
    public void setProduct(ProductVO product) {
    this.product = product;
    }
    public int getQuantity() {
    return quantity;
    }
    public void setQuantity(int quantity) {
    this.quantity = quantity;
    }
    /**
     * 商品数量的增加
     */
    public void incrementQuantity(){
    quantity++;
    }
    /**
     * 商品价格
     * @return
     */
    public double getTotalPrice() {
    if (product != null) {
    return product.getPrice() * quantity;
    }else {
    return 0;
    }
    }
    }
      

  3.   


    import java.util.Collection;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;public class ShopCart { private Map items = new HashMap();
    public void add(OrderLine line) {
    Integer product_id = line.getProduct().getId();
    OrderLine orderLine = (OrderLine) items.get(product_id);
    if (orderLine == null) {
    items.put(product_id, line);
    } else {
    orderLine.setAmount(orderLine.getAmount() + line.getAmount());
    items.put(product_id, orderLine);
    }
    } public void remove(OrderLine line) {
    Integer product_id = line.getProduct().getId();
    items.remove(product_id);
    } public void remove(Integer id) {
    items.remove(id);
    }
    public void modify(OrderLine line) {
    Integer product_id = line.getProduct().getId();
    items.put(product_id, line);
    } public double getTotal() {
    double total = 0;
    Set set = items.keySet();
    Iterator it = set.iterator();
    while (it.hasNext()) {
    Integer id = (Integer) it.next();
    OrderLine line = (OrderLine) items.get(id);
    total += line.getProduct().getBasePrice() * line.getAmount();
    }
    return total;
    }
    public int getCount() {
    int count = 0;
    Set set = items.keySet();
    Iterator it = set.iterator();
    while (it.hasNext()) {
    Integer id = (Integer) it.next();
    OrderLine line = (OrderLine) items.get(id);
    count += line.getAmount();
    }
    return count;
    }
    public int getSize() {
    return items.size();
    }
    public Order getOrder() {
    Order order = new Order();
    Set set = new HashSet();
    Collection list = items.values();
    set.addAll(list);
    order.setOrderlines(set);
    return order;
    }
    public void clearCart() {
    items.clear();
    } public Map getItems() {
    return items;
    } public void setItems(Map items) {
    this.items = items;
    }}
      

  4.   

    二楼的朋友意见挺好,四楼的朋友OrderLine类是不是包含了商品类和数量的属性?