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
将考虑其内容(它将项目的哈希码混合在一起).