java map覆盖吗_关于JAVA map 覆盖的一个小细节

本文探讨了在Java中,当Book类的hashCode和equals方法仅基于id属性重写时,将相同id的Book对象放入HashMap中会发生的情况。举例说明了如何在购物车场景下,通过id创建新的Book对象并更新购物车商品数量,导致Map中键值对的覆盖行为,以及由此引发的键的属性更新问题。总结了Map中键的覆盖原则,即新键的属性会覆盖旧键相同的部分,而保留旧键独有的属性。
摘要由CSDN通过智能技术生成

假设Book类重写hashcode和equals方法时只使用了属性id。当b1,b2对象的id属性相同时,

往Map map添加两个元素和

可能会出现下面的情况

Map map = new HashMap();

Book b1= newBook();

b1.setId("001");

b1.setName("我是001");

b1.setDescription("Description");

Book b2= newBook();

b2.setId("001");

map.put(b1,"我是001");

map.put(b2,"我是002");

System.out.println(map);//打印结果为 {Book [id=001, name=我001,description=Description]=我是002}

即最终map中保留的为

网上商城项目中,假设购物车数据是封装在Map对象中。当我们在购物车页面中点击增加某件商品b1的购买数量,假设购物车中已有 。先将该商品id传入后台,根据该id创建对应的book对象b2,再把放入购物车,购物车就会更新为

这样做的好处是,只需要创建一个只有id属性的b2,不需要去访问数据库把该商品的所有信息得到来创建b2

补充:如果b2的属性不止id时,则b1中的属性会更新一部分。

即map中key的覆盖原则是:

b2覆盖b1时,b1和b2都有的属性保留b2的,b1有而b2没有的保留b1的。

Map map = new HashMap();

Book b1= newBook();

b1.setId("001");

b1.setName("我是001");

b1.setDescription("Description");

Book b2= newBook();

b2.setId("001");

b1.setName("我是002");

map.put(b1,"我是001");

map.put(b2,"我是002");

System.out.println(map);//打印结果为 {Book [id=001, name=我是002,description=Description]=我是002}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值