關於HashMap的基本情況。
1.無論對象類型如何,HashMap都會爲每個鍵生成哈希碼。
2.具體而言 - 哈希碼將基於鍵和值(即條目)
實驗產生: 考慮一個用戶定義的對象(例如SPObject)爲HashMap中的密鑰; SPObject只有一個參數(名稱)。請參閱:http://www.programcreek.com/2011/07/java-equals-and-hashcode-contract/
如果hashCode()和equals()在SPObject類中寫入不正確,則問題如下。
放入2個條目 - 新的SPObject(「SP」)&新的SPObject(「SP」)。這些被視爲不同的對象,併成功地存儲在地圖中。
map.get(new SPObject(「SP」))將返回null。
map.contains(new SPObject(「SP」))將返回false。
這是結果,如果hashCode /等於合同處理不當。
hashCode() | equals() | Treated as | Description
No | No | Duplicate | Stored in different buckets.
| Treated as different object.
Yes | No | Duplicate | Stored in same bucket.
| Treated as different object.
| Because, the default(Object) equals method will check only the reference of objects.
No | Yes | Duplicate | Stored in different buckets.Treated as different object
Yes(hashlogic) | Yes | Unique | Stored in same bucket.Treated as same object.Efficient.
Yes(constant) | Yes | Unique | Stored in same bucket.Treated as same object.
| Inefficient, because it will iterate bucket elements for equality check.
感謝您的澄清! – prasopes
「如果是公共汽車,它是紅色的」你的英語水平如何:-) –
喬恩,你可以給我任何例子,其中HashCode可以是相同的,但對象不相等? – UnKnown