项目实战のCollection和Map
前面两篇文章讲了collection的list应用和set的应用
根据单列值和双列值分为collection和map然后根据是否有序将collection分为list和set。
Collection(单列值)
List(有序)
set(无序)
Map(键值对)
应用:collection适合进行显示和遍历,但是如果对数据进行操作的话用map的键值对很方便。以前只是做过相关的demo,现在项目中用到了,可以更淋漓尽致的理解理论知识,进行数据结构的选型:
购物车:包含很多个购物项的例子
package cn.itcast.shop.cart.vo;
import cn.itcast.shop.product.vo.Product;
/*
* 购物项
* **/
public class CartItem {
public Product getProduct() {
return product;
}
public int getCount() {
return count;
}
public void setProduct(Product product) {
this.product = product;
}
public void setCount(int count) {
this.count = count;
}
public void setSubtotal(double subtotal) {
this.subtotal = subtotal;
}
//小计自动计算
public double getSubtotal() {
return count*product.getShop_price();
}
private Product product;
private int count;//某种商品数量
private double subtotal;//小计
}
package cn.itcast.shop.cart.vo;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
/*
* 购物车
* **/
public class Cart {
//购物项集合:Map的key是商品pid,value是购物项。hashMap是无序的
private Map<Integer, CartItem> map= new LinkedHashMap<Integer, CartItem>();
//购物总金额
private double total;
//购物车的功能
public Collection<CartItem> getCartItems(){
return map.values();//返回值是一个collection,取得是map的值的集合
}
//1将购物项添加到购物车
public void addCart(CartItem cartItem){
/*判断购物车是否存在购物项
* *若存在:
* *数量增加
* *总计+=购物项
* *若不存在
* *向map中增加购物项
* *总计+=购物项
*
*
* */
//获得商品id
Integer pid= cartItem.getProduct().getPid();
//判断购物车中是否存在购物项
if(map.containsKey(pid)){
//存在
CartItem _cartItem=map.get(pid);//原来的购物项
_cartItem.setCount(_cartItem.getCount()+cartItem.getCount());
}else{
//不存在
map.put(pid, cartItem);
}
total+=cartItem.getSubtotal();
}
public double getTotal() {
return total;
}
//2从购物车移除购物项
public void removeCart(Integer pid){
//将购物项移除购物车map.remove()的时候返回的是移除的购物项
CartItem cartItem= map.remove(pid);
//总结-=移除的购物项的小计
total-=cartItem.getSubtotal();
}
//3清空购物车
public void clearCart(){
//将所有的购物项清空
map.clear();
//将总计设置成0
total=0;
}
}
还没有评论,来说两句吧...