phi*_*294 6 java collections hashcode
鉴于我有一些课程,其中包含各种领域:
class MyClass {
private String s;
private MySecondClass c;
private Collection<someInterface> coll;
// ...
@Override public int hashCode() {
// ????
}
}
Run Code Online (Sandbox Code Playgroud)
而且,我确实有各种各样的物品,我想存放在一个HashMap.对于这一点,我需要的hashCode()的MyClass.
我得去到各个领域和各个父类递归,以确保它们都实现hashCode()正常,否则hashCode()的MyClass可能没有考虑到一些值.这是正确的吗?
我该怎么办Collection?我可以一直依赖它的hashCode()方法吗?它是否会考虑我的someInterface对象中可能存在的所有子值?
我在这里打开了关于唯一ID对象的实际问题的第二个问题:如何为对象生成(几乎)唯一的哈希ID?
澄清:
你班上有什么或多或少的不合理吗?字符串s?然后只将其用作哈希码.
如果coll更改其中一个对象中的任何值,则两个对象的MyClass hashCode()肯定会有所不同.如果两个对象的所有字段都存储相同的值,HashCode应该只返回相同的值.基本上,在MyClass对象上进行一些耗时的计算.如果计算已经使用完全相同的值在前一段时间完成,我想多余时间.为此,如果结果已经可用,我想查看HashMap.
你会在HashMap中使用MyClass作为键还是值?如果是键,则必须覆盖equals()和hashCode()
因此,我使用hashCode OF MyClass作为HashMap中的键.值(计算结果)将是不同的,如整数(简化).
您认为平等对多个馆藏意味着什么?它应该依赖于元素排序吗?它应该只取决于存在的绝对元素吗?
这不会取决于存储的Collection类型coll吗?虽然我觉得订购并不重要,不
你从这个网站得到的回应是华丽的.谢谢你们
@AlexWien取决于该集合的项是否是该类的等价定义的一部分.
是的,是的,他们是.
- 我得去到各个领域和各个父类递归,以确保它们都实现
hashCode()正常,否则hashCode()的MyClass可能没有考虑到一些值.这是正确的吗?
那是对的.它并不像听起来那么繁重,因为经验法则是你只需覆盖hashCode()就可以覆盖equals().您不必担心使用默认值的类equals(); 默认hashCode()就足够了.
此外,对于您的类,您只需要在equals()方法中对比较的字段进行哈希处理.例如,如果其中一个字段是唯一标识符,则只需检查该字段equals()并对其进行哈希处理即可hashCode().
所有这一切都取决于你是否也要压倒一切equals().如果你还没有覆盖它,也不要打扰它们hashCode().
- 我该怎么办
Collection?我可以一直依赖它的hashCode()方法吗?它是否会考虑我的someInterface对象中可能存在的所有子值?
是的,您可以依赖Java标准库中的任何集合类型来hashCode()正确实现.是的,任何List或Set将考虑其内容(它将项目的哈希码混合在一起).
| 归档时间: |
|
| 查看次数: |
2582 次 |
| 最近记录: |