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