假设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}