Java 比较列表中同一对象的两个实例
我试着比较两个物体,看它们是否相同。我从JSON代码创建第一个列表,并使用InstructionModel的实例填充列表(数据)。然后,通过选择数据并创建InstructionModel的新实例(模型),将数据与数据库进行比较。但结果总是错误的,我在代码中做错了什么Java 比较列表中同一对象的两个实例,java,list,Java,List,我试着比较两个物体,看它们是否相同。我从JSON代码创建第一个列表,并使用InstructionModel的实例填充列表(数据)。然后,通过选择数据并创建InstructionModel的新实例(模型),将数据与数据库进行比较。但结果总是错误的,我在代码中做错了什么 exists = data.contains(model); if(!exists) { //Do Some Stuff Here } 来自列表的数据: 指令模型对象中的数据: 您需要重写InstructionModel
exists = data.contains(model);
if(!exists)
{
//Do Some Stuff Here
}
来自列表的数据
:
指令模型对象中的数据:
您需要重写InstructionModel类的equals方法。 在这个方法中,您比较您的值,如果它们匹配,则返回true,如果不匹配,则返回false 该函数将使用容器中对象的
Object#equals
函数。如果未重写此函数,它将仅比较引用,而不是实际值
补充:
正如注释所提到的,如果重写“equals”方法,那么也需要重写“hashCode”方法(反之亦然)。集合将使用这些方法来比较对象的实例。例如:如果不同时重写这两个实例,则列表中的两个实例可能被视为相同,但在一个实例中不相同。您需要重写InstructionModel类的equals方法。 在这个方法中,您比较您的值,如果它们匹配,则返回true,如果不匹配,则返回false 该函数将使用容器中对象的
Object#equals
函数。如果未重写此函数,它将仅比较引用,而不是实际值
补充:
正如注释所提到的,如果重写“equals”方法,那么也需要重写“hashCode”方法(反之亦然)。集合将使用这些方法来比较对象的实例。例如:如果不同时覆盖这两个实例,则列表中的两个实例可能被视为相同,但在a中不一样。您可能希望覆盖
指令模型上的equals
方法您可能希望覆盖指令模型上的equals
方法如何知道结果始终为假?如何在指令模型中实现equals
?如果未重写,则contains
将检查实际对象是否存在,这当然是错误的。是否实现了equals?如何知道结果总是错误的?如何在指令模型中实现equals
?如果未重写,则contains
将检查实际对象是否存在,这当然是错误的。是否实现了equals?请记住,hashcode方法也必须重新实现,因此如果a.equals(b)
,则a.hashcode()==b.hashcode()
@SJuan76我理解重写equals方法,但是为什么我也必须重写hashCode方法呢?我应该用什么来覆盖它呢?因为它的规格说明上面提到的属性必须是真的。很多逻辑都希望它是真的(例如,HashMap
s等等),并且记住hashcode方法也必须重新实现,所以如果A.equals(b)
,那么A.hashcode()==b.hashcode()
@SJuan76我理解重写equals方法,但是为什么我也必须重写hashCode方法呢?我应该用什么来覆盖它呢?因为它的规格说明上面提到的属性必须是真的。很多逻辑都希望它是真的(例如,HashMap
s等等)。