java中的hashcode实现
对于下面的示例,我很难理解如何实现一个有效的哈希代码: 我有两门课:java中的hashcode实现,java,hashcode,Java,Hashcode,对于下面的示例,我很难理解如何实现一个有效的哈希代码: 我有两门课: Class A { } Class B { protected List<A> constitutingObjects; } A类 { } B类 { 受保护的物品清单; } 已重写equal,因此如果A是B的一部分,则对象A等于对象B。 我遇到的问题是,我不知道如何实现这个Hashcode 有什么想法吗 谢谢。在Java中定义equals和hashCode时,您不是在测试两个类是否相等,而是在测试相
Class A
{
}
Class B
{
protected List<A> constitutingObjects;
}
A类
{
}
B类
{
受保护的物品清单;
}
已重写equal,因此如果A是B的一部分,则对象A等于对象B。
我遇到的问题是,我不知道如何实现这个Hashcode
有什么想法吗
谢谢。在Java中定义
equals
和hashCode
时,您不是在测试两个类是否相等,而是在测试相同类型(类)的两个对象是否可以相等,根据equals
方法,或者它们可以位于相同的“bucket”(逻辑对象组)中根据hashCode
因此,如果x和y是两个类型为A的对象:
A x = new A();
A y = new A();
- 如果
为真,则x.equals(b)
必须等于x.hashCode()
y.hashCode()
- 如果
则x.hashCode()==y.hashCode()
可能为真或假x.equals(y)
- TL;医生:你想做的没有意义。退一步,试着用不同的方式处理你更大的任务
已重写equal,因此如果A是B的一部分,则A类等于B类
这听起来是个很糟糕的主意。很难说这些对象是用来表示什么的,但是包含集合的东西在逻辑上并不等于集合的元素——购物清单并不等于“牛奶”
不要忘记,您必须遵守文档中指定的要求。许多其他代码将依赖于这些保证
除非您只返回一个常量,否则实现
hashCode
基本上是不可能的。两个相等对象的哈希代码必须相等,这意味着ClassB
的任何实例的哈希代码必须等于构成对象的每个元素的哈希代码,这意味着所有这些元素都必须具有相同的哈希代码。除非ClassA
的实例以某种方式“知道”它们的容器是什么,否则我不认为这是可能的。在代码片段中定义了两个类,但在文本中提到了两个对象。我仍然看不到一个有效的问题。我想问题实际上是到了这种情况。谢谢你的回答