SSH网上商城—Map的用法

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

              SSH网上商城—Map的用法_第1张图片


             Set 、 List 、Map的区别:

             SSH网上商城—Map的用法_第2张图片

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

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

            

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

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


       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中 

<form id="cartForm" action="${ pageContext.request.contextPath }/cart_addCart.action" method="post" >
    <input type="hidden" name="pid" value="<s:property value="model.pid"/>"/>
    <div class="action">
       <dl class="quantity">
	 <dt>购买数量:</dt>
	     <dd>
	             <input id="count" name="count" value="1" maxlength="4" onpaste="return false;" type="text"/>
	     </dd>
	     <dd>
	         件
	     </dd>
          </dl>
						
      <div class="buy">
	   <input id="addCart" class="addCart" value="加入购物车" type="button" onclick="saveCart()"/>
      </div>
    </div>
</form>

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

     

//将购物项添加到购物车:执行的方法
	public String addCart()
	{
		//封装一个CartItem对象
		CartItem cartItem = new CartItem();
		//设置数量
		cartItem.setCount(count);
		//根据pid进行查询商品
		Product product = productService.findBypid(pid);
		//设置商品:
		cartItem.setProduct(product);
		//将购物项添加到购物车
		//购物车应该存在session中
		Cart cart = getCart();
		cart.addCart(cartItem);
		
		return "addCart";
	}

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

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

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

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

 

<s:iterator var="cartItem" value="#session.cart.cartItems">
  <tr>
       <td width="60"><input type="hidden" name="id" value="22">
	    <img src="${pageContext.request.contextPath}/<s:property value="#cartItem.product.image"/>">
       </td>
       <td>
            <a target="_blank"><s:property  value="#cartItem.product.pname" /></a>
       </td>
       <td>¥<s:property value="#cartItem.product.shop_price" />
       </td>
       <td class="quantity" width="60"><s:property value="#cartItem.count" /></td>
       <td width="140"><span class="subtotal">¥<s:property  value="#cartItem.subtotal" />
       </span> </td>
       <td><a href="${ pageContext.request.contextPath }/cart_removeCart.action?pid=<s:property value="#cartItem.product.pid"/>" class="delete">删除</a></td>
   </tr>
</s:iterator>

      总结:初步的总结,自己其实还是有点不懂,期待后面应用的时候,深入的理解!

你可能感兴趣的:(SSH网上商城—Map的用法)