SSH网上商城—Map的用法

Java 容器大致可以分为以下三类:

              


             Set 、 List 、Map的区别:

             

              List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。

             
           Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

            

            set 和list 都支持iterator() 方法,改方法返回一个迭代子,使用该迭代子即可逐一访问conllection中的每一个元素。典型的用法如下:

  1. Iterator it = collection.iterator(); // 获得一个迭代子  
  2. while(it.hasNext()) {  
  3.    Object obj = it.next(); // 得到下一个元素  
  4. }  


       Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

        添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。

     

        网上商城中Map应用在添加购物车的功能中,代码如下:

        前台提交from表单,把pid(商品id)传到Action中 

  1. <form id="cartForm" action="${ pageContext.request.contextPath }/cart_addCart.action" method="post" >  
  2.     <input type="hidden" name="pid" value="<s:property value="model.pid"/>"/>  
  3.     <div class="action">  
  4.        <dl class="quantity">  
  5.      <dt>购买数量:</dt>  
  6.          <dd>  
  7.                  <input id="count" name="count" value="1" maxlength="4" οnpaste="return false;" type="text"/>  
  8.          </dd>  
  9.          <dd>  
  10.              件  
  11.          </dd>  
  12.           </dl>  
  13.                           
  14.       <div class="buy">  
  15.        <input id="addCart" class="addCart" value="加入购物车" type="button" οnclick="saveCart()"/>  
  16.       </div>  
  17.     </div>  
  18. </form>  

        Action中根据pid查询商品,然后调用添加购物车的方法。

     

  1. //将购物项添加到购物车:执行的方法  
  2.     public String addCart()  
  3.     {  
  4.         //封装一个CartItem对象  
  5.         CartItem cartItem = new CartItem();  
  6.         //设置数量  
  7.         cartItem.setCount(count);  
  8.         //根据pid进行查询商品  
  9.         Product product = productService.findBypid(pid);  
  10.         //设置商品:  
  11.         cartItem.setProduct(product);  
  12.         //将购物项添加到购物车  
  13.         //购物车应该存在session中  
  14.         Cart cart = getCart();  
  15.         cart.addCart(cartItem);  
  16.           
  17.         return "addCart";  
  18.     }  

            addCart方法,把pid和购物项,按照map的结构形式存储到session中。

  1. private Map<Integer, CartItem> map = new LinkedHashMap<Integer, CartItem>();  

  1. public void addCart(CartItem cartItem)  
  2.     {  
  3.         //判断物品是否已在购物项  
  4.         /* 
  5.          * *如果存在 
  6.          *     *数量增加 
  7.          *     *总计=总计+购物项小计 
  8.          *  *如果不存在 
  9.          *     *向map中添加购物项 
  10.          *     *总计=总计+购物项小计 
  11.          */  
  12.         //获得商品id  
  13.         Integer pid = cartItem.getProduct().getPid();  
  14.         //判断购物车中是否已存在改购物项  
  15.         if(map.containsKey(pid))  
  16.         {  
  17.             //存在  
  18.             CartItem _cartItem = map.get(pid); //获得购物车中原来的购物项  
  19.             _cartItem.setCount(_cartItem.getCount()+cartItem.getCount());  
  20.         }else  
  21.         {  
  22.             //不存在  
  23.             map.put(pid, cartItem);  
  24.         }  
  25.         //设置总计的值  
  26.         total +=cartItem.getSubtotal();  
  27.           
  28.     }  

         前台显示购物车中的商品!

 

  1. <s:iterator var="cartItem" value="#session.cart.cartItems">  
  2.   <tr>  
  3.        <td width="60"><input type="hidden" name="id" value="22">  
  4.         <img src="${pageContext.request.contextPath}/<s:property value="#cartItem.product.image"/>">  
  5.        </td>  
  6.        <td>  
  7.             <a target="_blank"><s:property  value="#cartItem.product.pname" /></a>  
  8.        </td>  
  9.        <td>¥<s:property value="#cartItem.product.shop_price" />  
  10.        </td>  
  11.        <td class="quantity" width="60"><s:property value="#cartItem.count" /></td>  
  12.        <td width="140"><span class="subtotal">¥<s:property  value="#cartItem.subtotal" />  
  13.        </span> </td>  
  14.        <td><a href="${ pageContext.request.contextPath }/cart_removeCart.action?pid=<s:property value="#cartItem.product.pid"/>" class="delete">删除</a></td>  
  15.    </tr>  
  16. </s:iterator>  


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值