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

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

    //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";
    }
时间: 2024-10-13 17:57:46

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

django-用户浏览记录添加及商品详情页

视图函数views.py # /goods/商品id class DetailView(View): '''详情页''' def get(self, request, goods_id): '''显示详情页''' try: sku = GoodsSKU.objects.get(id=goods_id) except GoodsSKU.DoesNotExist: # 商品不存在 return redirect(reverse('goods:index')) # 获取商品的分类信息 types =

easymall项目的商品删除,前台商品分页,商品详情,购物车模块

简单的挑选一下昨天所学的重点知识模块,以备后续的复习 一.购物车模块1.1购物车两种实现的区别:!!!!!!!! 用session保存  缺点:浏览器关闭,session失效时保存在session中购物信息将会消失  后续优化,将购买的信息除了保存在session中以外,还要将购物的信息保存在cookie中,这样  就解决了浏览器关闭购买商品信息丢失的问题(但是解决不了跟换电脑信息丢失的问题)  优点:不用操作数据库,可以减少数据库访问压力 数据库中:  缺点:只用登录的用户才能添加购物车   

电商平台商品类别与商品表设计方法

1.商品类别表设计 采用树状结构保存商品所有了类别信息,见下图1 其中上层的是类别树结构,加上方框的项目,代表类别的根节点,例如“贴膜”,贴膜下方的两层树结构式是“贴膜”类别商品的筛选树(一般2层),用来产生商品的筛选项目,图2 图1 树状结构图 图2 商品筛选图 图3 子类别图 2.商品表设计 首先创建一个商品信息的通用表,用来保存商品的共性信息 再根据商品类别表中,每个类别的叶子节点,例如”贴膜“,单独创建一个表,用来存放此类商品的筛选信息(每个筛选项可以做为此表的一列),列的值为筛选值(可

电商网站商品模型之商品详情页设计方案

如下设计方案参考淘宝和华为商城 SKU SPU的关系 SPU = Standard Product Unit (标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性.例如iphone4就是一个SPU,与套餐.存储容量.颜色无关. SKU=stock keeping unit(库存量单位)SKU即库存进出计量的单位, 可以是以件.盒.托盘等为单位.SKU是物理上不可分割的最小存货单元.在使用时要根据不同业态,不同管理模式来处理.例如32G

Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)

概述 Java语言中,提供了一套数据集合框架,其中定义了一些诸如List.Set等抽象数据类型,每个抽象数据类型的各个具体实现,底层又采用了不同的实现方式,比如ArrayList和LinkedList. 除此之外,Java对于数据集合的遍历,也提供了几种不同的方式.开发人员必须要清楚的明白每一种遍历方式的特点.适用场合.以及在不同底层实现上的表现.下面就详细分析一下这一块内容. 数据元素是怎样在内存中存放的? 数据元素在内存中,主要有2种存储方式: 1.顺序存储,Random Access(Di

Android学QQ空间相册浏览类型横向滑动效果显示多图片MyHorizontalScrollView

Android学QQ空间相册浏览类型横向滑动效果显示多图片MyHorizontalScrollView 我们来定制一下吧 布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="m

js实现的购物车选中商品实现计算商品总价格

js实现的购物车选中商品实现计算商品总价格:为了在激烈的互联网竞争中获得一席之地,都努力使自己的网站更为人性化,比如在购物网站一般都有这样的功能,那就是在结算商品的时候,网站可以自动计算要购买商品所需要花费的金钱数量.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http:

商品详情页面的显示

当点击商品图片的时候,会跳转到商品的详情页面,我们看下具体是如何实现的: 1.点击商品的图片,打开商品详情页面 a)         商品基本信息 b)        延迟加载商品详情.延迟一秒加载使用ajax c)         商品的规格参数.按需加载,当用户点击商品规格参数tab页,加载ajax. 如图:点击图片后显示内容如下: 所以需要从三个表中获取数据,发布服务接口: 需要在taotao-rest工程中发布服务 1.取商品基本信息的服务 2.取商品描述的服务 3.取商品规格的服务 需

Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和