如果同一类的对象相同,则为java 1 周,5 日 Questions & Answers 73 我有一个java类,它有15个数据成员。 我有两个这个类的对象。 我想检查这两个物体是否相同。 比较每个数据成员非常耗时。 有更好的方法吗
# 1 楼答案 根据你的评论 Suppose i have 1000 objects with unique id stored in one table.same 1000 objects comes again via some scheduler and it checks whether the values have been changed or not. 据我所知,每个对象将与其存储的版本进行一次精确的比较。在这个用例中,没有比比较字段更好的方法了 人们想到的一个想法是使用从字段值派生的哈希代码。如果散列码不同,字段也必须不同。这只需要一个整数比较。如果散列码相同,仍然需要检查字段值,因为可能会发生冲突:不同的对象产生相同的散列码 但我想,在任何一步中,相当大比例的对象都没有改变它们的值。因此,引入散列码只能改善“已更改”的情况,计算一个散列码可能比比较两个对象花费更长的时间
# 2 楼答案 如果你的意思是“它需要大量的CPU时间”——不需要。它只是比较了一大堆位,这就是。。确切地说,你想做什么,所以,就这么做:比较每个领域 如果你的意思是“这需要大量的编写”,IDE可以自动生成这些东西,不过你必须查看它,维护它,当你添加一个字段时会遇到麻烦,并且忘记更新那些模板。因此,您可以使用Project Lombok的^{}或^{}特性
# 1 楼答案
根据你的评论
据我所知,每个对象将与其存储的版本进行一次精确的比较。在这个用例中,没有比比较字段更好的方法了
人们想到的一个想法是使用从字段值派生的哈希代码。如果散列码不同,字段也必须不同。这只需要一个整数比较。如果散列码相同,仍然需要检查字段值,因为可能会发生冲突:不同的对象产生相同的散列码
但我想,在任何一步中,相当大比例的对象都没有改变它们的值。因此,引入散列码只能改善“已更改”的情况,计算一个散列码可能比比较两个对象花费更长的时间
# 2 楼答案
如果你的意思是“它需要大量的CPU时间”——不需要。它只是比较了一大堆位,这就是。。确切地说,你想做什么,所以,就这么做:比较每个领域
如果你的意思是“这需要大量的编写”,IDE可以自动生成这些东西,不过你必须查看它,维护它,当你添加一个字段时会遇到麻烦,并且忘记更新那些模板。因此,您可以使用Project Lombok的^{} 或^{} 特性