码迷,mamicode.com
首页 > 其他好文 > 详细

使用集合保存“最近浏览商品” 完美实现商品显示顺序 但性能不高

时间:2017-09-27 23:17:23      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:model   his   return   remove   int   nbsp   完成   text   bsp   

自己做项目时的代码记录  方式比较笨拙  但可以完成需要的效果【“最近浏览”的商品信息  时刻都在最近浏览界面窗口的第一位置】

技术分享

    //3.根据商品id 查询一件商品  同时把当前商品设计进集合中  用来完成浏览记录功能
    public String productDetail()throws Exception{
        //传递的是商品对应的id
        Product product=this.productService.productDetail(model);
        ActionContext.getContext().put("product",product);
        
        //------------------------------
        //最近浏览商品的功能  使用session保存用户点击的商品  模拟‘浏览记录’功能
        //1.使用LinkedHashMap  非线程安全  有序
        Map<String,Product> history=(Map<String, Product>) ServletActionContext.getRequest().getSession().getAttribute("history");
        if(history==null){
            history=new LinkedHashMap<String,Product>();
        }
        //判断集合中是否存在当前浏览的商品对象
        if(history.containsKey(model.getEp_id())){
            //把对象移除  然后再下面重新添加
            history.remove(model.getEp_id());
        }
        history.put(model.getEp_id(),product);
        //把数据保存在session域中  在整个会话期间都有效
        ServletActionContext.getRequest().getSession().setAttribute("history", history);
        //以上代码  保证  最后的对象  都是刚刚浏览过的  但是输出显示的时候  是从第一个开始
        //(页面显示顺序:最先浏览的永远在第一个  最近浏览的永远在最后一个)   所以要对集合进行逆序设计
        //------------------------------
        
        //对对象集合进行倒序设计
        Set<String> keySet = history.keySet();
        //转为ArrayList集合
        List<String> list=new ArrayList<String>();
        list.addAll(keySet);
        //然后倒序取出list集合中的数据(key)
        int t=0;//规定页面上显示的浏览历史  最多存在5个
        List<String> listfive=new ArrayList<String>();
        for(int i=list.size()-1;i>=0;i--){
            //找出最后边的key  找出5个
            //System.out.println(list.get(i));
            if(t<5){
                if(list.get(i)!=null){
                    listfive.add(list.get(i));
                }
            }else{
                break;
            }
            t++;
        }
        //以上代码  保证:list集合中存放的都是逆序之后的数据   而且最多取5条 
        //即从最后往前取5个  set集合中的最后一个key永远放在list中的第一个位置(下标0)
        
        //定义新的linkedHashMap 存放的数据都是最进点击过的商品
        Map<String,Product> MP=new LinkedHashMap<String,Product>();
        for(int i=0;i<listfive.size();i++){
            if(listfive.get(i)!=null){
                MP.put(listfive.get(i),history.get(listfive.get(i)));
            }
        }
        //以上程序虽然完成了功能  但是性能不高
        ServletActionContext.getRequest().getSession().setAttribute("MP", MP);
        //页面中使用MP中保存的对象进行显示  (页面显示顺序:最先浏览的永远在最后一个  最近浏览的永远在第一个) 
        
        return "productDetail";
    }

 

使用集合保存“最近浏览商品” 完美实现商品显示顺序 但性能不高

标签:model   his   return   remove   int   nbsp   完成   text   bsp   

原文地址:http://www.cnblogs.com/Joke-Jay/p/7604372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!