关于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