是否有一些java.util.Map不使用HashCode的实现?
我有以下问题:
get()on时HashMap,我得到null,因为旧对象hashCode在步骤1中是不同的.有解决方案吗?或者我应该只为我的equals/hashCode方法使用不可变字段?
IdentityHashMap使用Object标识而不是hashCode; 但这确实意味着您需要用作键的原始对象来检索地图的值.其他选项是重新定义哈希码以排除对象的可变部分,或者 - 如果由于某种原因无法重新定义hashCode - 将对象包装在另一个提供稳定hashCode的对象中.
建议您使用不可变密钥,并将键/值对重新插入Map,而不是在原位改变密钥.正如您所发现的那样,这只会导致奇怪的错误.
如果这不是您的选项,那么请查看是否可以忽略方法中的mutable属性hashCode(),以便哈希代码不会更改.但是,如果这是该课程的唯一属性,那不是一个好主意.
您可以使用TreeMap,我不认为使用hashCode().但是,它确实需要密钥compareTo()和equals()方法之间的一致性,因此如果这些方法的返回值可以更改,您可能会遇到与以前相同的问题.
| 归档时间: |
|
| 查看次数: |
2447 次 |
| 最近记录: |