關於JAVA map 覆蓋的一個小細節

假設Book類重寫hashcode和equals方法時只使用了屬性id。當b1,b2對象的id屬性相同時,數據庫

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

可能會出現下面的狀況code

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,購買數量+增長的數量>blog

這樣作的好處是,只須要建立一個只有id屬性的b2,不須要去訪問數據庫把該商品的全部信息獲得來建立b2ip

 

 

補充:若是b2的屬性不止id時,則b1中的屬性會更新一部分。hash

即map中key的覆蓋原則是:io

    b2覆蓋b1時,b1和b2都有的屬性保留b2的,b1有而b2沒有的保留b1的。class

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}
相關文章
相關標籤/搜索