作为容器的HashSet通过您放入其中的项目的哈希码访问其项目(包含,删除).哈希码通常由其实例成员的状态构建.因此哈希码随着对象状态的操纵而改变.
Object的文档说:"维护hashCode()方法的一般契约,该方法声明相等的对象必须具有相同的哈希码"
正如您所注意到的,如果更改保留在HashSet中的对象的状态,则无法再通过remove方法访问该对象,也无法通过HashMap的contains方法找到该对象.
您提供的选项是:
删除对象,更改它并再次添加它 - 如果HashSet是必需的,那么工作很精彩,最简单
保持哈希码的值'某处' - 意味着,对于不相等的对象,您具有相同的哈希码.或者,如果您遵守文档,您可能会遇到两个等于且具有相同哈希码的对象,但它们的成员变量不同!这可能导致不可预测的错误.
归档时间: |
|
查看次数: |
3716 次 |
最近记录: |