zoukankan      html  css  js  c++  java
  • 关于JAVA map 覆盖的一个小细节

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

    往Map<Object,String> map添加两个元素<b1,"我是001">和<b2,"我是002">

    可能会出现下面的情况

    Map<Book,String> map = new HashMap<Book, String>();
    
    Book b1 = new Book();
    b1.setId("001");
    b1.setName("我是001");
    b1.setDescription("Description");
    
    Book b2 = new Book();
    b2.setId("001");
    
    map.put(b1, "我是001");
    map.put(b2, "我是002");
    
    System.out.println(map);
    //打印结果为 {Book [id=001, name=我001,description=Description]=我是002}

    即最终map中保留的为<b1,"我是002">

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

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

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

    即map中key的覆盖原则是:

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

    Map<Book,String> map = new HashMap<Book, String>();
            
    Book b1 = new Book();
    b1.setId("001");
    b1.setName("我是001");
    b1.setDescription("Description");
            
    Book b2 = new Book();
    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}
  • 相关阅读:
    面向对象OO第15次作业总结
    面向对象OO第9-11次作业总结
    一文讲完最基本的图算法——图的存储、遍历、最短路径、最小生成树、拓扑排序
    字符串匹配问题的KMP算法
    提问回顾与个人总结
    软工结对作业—最长单词链
    软工第1次个人作业
    软工第0次个人作业
    OO最后一次作业
    JSF生存指南P1
  • 原文地址:https://www.cnblogs.com/whu-gbf/p/8515476.html
Copyright © 2011-2022 走看看