2014-02-26 58 views
-2

我有散列映射<< String, AddressBO >>key和类作为value,其中AddressBO是具有add1add2citystatezip等领域,并在地图我只有两个一类键 - 小学和中学有价值的是AddressBO的对象。现在我必须比较地址是相同还是不同,即两个对象的值是相同的。为此,我必须覆盖等于和hashcode方法在AddressBo类或implement comparator interface的HashMap <字符串,AddressBO>在Java

+0

你可以试试机器人的所有对象返回相同的值h解决方案。它会工作。 – Antoniossss

+0

值不是哈希,只有键,所以重写hashcode是相当无用的。无论您是创建equals还是compareTo方法,还是创建比较器,都无关紧要,它们都可以工作。 – Martin

回答

0

这个问题其实没有什么关系HashMap,它更多的只是“我怎么在java中比较对象”。是的,如果您想做任何不仅仅是参考匹配的事情,您需要覆盖equals。此外,如果您覆盖equals,则还应覆盖hashCode以维持equalshashCode之间的合同。虽然hashCode对于HashMap对象的值是无关紧要的,但如果您尝试将对象用作另一个HashMap的关键字,则可能很重要。重写compareTo是你应该做的事情,如果你打算把你的对象放在一些可能进行排序的结构中。

0

Comparable接口是用于排序,不相等的测试。当然,如果两个对象在逻辑上相同,你应该得到a.compareTo(b)=b.compareTo(a)=0,但是反过来并不总是对的。假设你想按姓氏和名字按字母顺序排列一个人名单。有两个人叫John Doe,一个是1956年出生的,一个是1996年可以按任何顺序上市 - 但他们不是同一个人。

如果要测试两个对象是否相等,请执行equals(Object)(和hashCode(),当然)。

0

如果要比较一个类的两个对象,类应该实现comparable接口。你也应该重写了hashCode和equals(即使你不希望使用这些功能...因为事情可能会改变未来,你还不如实现,同时你还了解什么是您的复杂对象中的事情)

如果你看看equals()的定义(“javadoc的Java语言),你会注意到它必须定义一个平等的关系(自反,对称和传递)和检查equals(null)应该总是返回null。

同样, hashCode()也必须一致(相匹配equals()

相关问题