Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较列表中同一对象的两个实例_Java_List - Fatal编程技术网

Java 比较列表中同一对象的两个实例

Java 比较列表中同一对象的两个实例,java,list,Java,List,我试着比较两个物体,看它们是否相同。我从JSON代码创建第一个列表,并使用InstructionModel的实例填充列表(数据)。然后,通过选择数据并创建InstructionModel的新实例(模型),将数据与数据库进行比较。但结果总是错误的,我在代码中做错了什么 exists = data.contains(model); if(!exists) { //Do Some Stuff Here } 来自列表的数据: 指令模型对象中的数据: 您需要重写InstructionModel

我试着比较两个物体,看它们是否相同。我从JSON代码创建第一个列表,并使用InstructionModel的实例填充列表(数据)。然后,通过选择数据并创建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等等)。