我們都知道HashMap中包含若干個鍵值對<key, value>,而key可以使用很多類型,如Integer,String等等。那麼,我們可以將自定義的對象作爲這個key嗎?
答案是可以的,但是必須要重寫hashcode()和equals()這兩個方法。
如果不重寫這兩個方法會怎麼樣呢?假設我們創建了這個對象的兩個實例,分別爲obj1和obj2。obj1和obj2是完全一樣的,因爲他們的所有的屬性都是相同的。
但是在使用HashMap的put()方法時,obj1和obj2還是會被放入不同的桶中。因爲Object類中存在hashcode()和equals()兩個方法,hashcode默認情況下和內存中的地址相關。因此obj1和obj2在調用hashcode()方法的時候會生成不同的哈希值。同時equals也要進行重寫,來定義兩個對象在什麼情況下視作相等。