LRU算法:商品浏览历史排序


// id字符串 :  使用LRU算法

// 原有的cookie中的id            当前新访问的书的id  应该写回的id bookHistory的取值
// a.  cookie[] cs为null         1 1
// b.  没有bookHistory中的cookie       1         1
// c.  1 2 2-1
// d.  2-1 1 1-2
// e.  1-2 3 3-1-2
// f.  1-2-3 2 2-1-3
// g.  2-1-3 4 4-2-1
public String makeIds(HttpServletRequest request, String id) {
           // a 
           Cookie cs[] = request.getCookies();
           if(cs==null)
                     return id;
           // b(cs不为空)
          Cookie cookie = null;
          for(Cookie c : cs){
                   if(Constants.BOOK_HISTORY.equals(c.getName())){  
                              cookie = c;
                              break;
                   }
           }
                        
           if(cookie == null)
                   return id;
                        
           // cdefg
           String ids[] = cookie.getValue().split("\\-");
           LinkedList<String> list = new LinkedList<String>(Arrays.asList(ids));  // [1,2,3]
           // cde   
           if(list.size() < 3){
                  if(list.contains(id)){
                         list.remove(id);
                  }
                  list.addFirst(id);
            }else{ 
                  // fg 
                  if(list.contains(id)){
                          list.remove(id);
                  }else{
                          list.removeLast();
                  }
                   list.addFirst(id);
            }
                        
            StringBuffer sb = new StringBuffer();
            for(int i=0; i<list.size(); i++){
                   if(i>0)
                         sb.append("-");
                   sb.append(list.get(i));
            }
                        
            return sb.toString();

}

             







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值