map中的key值,使用containsKey无法比较

qq_22511147 2017-09-22 03:28:31
如下代码,为购物车功能,Product为pojo类,查询商品信息后放到购物车,使用containsKey进行比较,商品明明相同,但是给的结果却是不同,求指点


public String addCart(Model model,String pid,HttpSession session) throws Exception{
Product product=infoService.findOne(pid);
//从session中获得购物车的数据
Map<Product,Integer> cart= (Map<Product, Integer>) session.getAttribute("cart");
//如果不存在购物车,则重新创建一个
if(cart==null){
cart=new HashMap<Product,Integer>();
}
//判断购物车中是否有该商品,如果存在则将该商品数加一
if(cart.containsKey(product)){
cart.put(product, cart.get(product)+1);
}else{
//否则购物车数据为1
cart.put(product, 1);
}
//将数据放到session中
session.setAttribute("cart", cart);
return "page/cart";
}
...全文
561 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
110成成 2017-09-22
  • 打赏
  • 举报
回复
楼上正解,map存储是根据 hashcode值和equals,如果是自定义对象,需重写该方法。
Freefish1994 2017-09-22
  • 打赏
  • 举报
回复
引用 3 楼 qq_22511147 的回复:
[quote=引用 1 楼 qq_27762917 的回复:] 你的键是一个对象,使用containsKey方法比较时需要重写实体类的“hashCode”和“equals”方法才可以
关于这两个的写法有什么规则吗?[/quote] 你如果懒得写可以用eclise自带的生成 Source ——> Generate hashCode() and equals()
qq_22511147 2017-09-22
  • 打赏
  • 举报
回复
引用 1 楼 qq_27762917 的回复:
你的键是一个对象,使用containsKey方法比较时需要重写实体类的“hashCode”和“equals”方法才可以
关于这两个的写法有什么规则吗?
一个治疗术 2017-09-22
  • 打赏
  • 举报
回复
同一个对象相同key的内存地址是一样的 解决方法楼上所说
Freefish1994 2017-09-22
  • 打赏
  • 举报
回复
你的键是一个对象,使用containsKey方法比较时需要重写实体类的“hashCode”和“equals”方法才可以

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧