2 HashMap之间的平等

nam*_*ked 22 java equals hashmap

在我的类的equals()方法中,我使用私有实例HashMap变量来比较相等性.但是,在比较它们的HashMap变量时,2个不同的对象仍然显示相等.进一步的研究将我带到了链接:链接在这里.但是,它只是说HashMap1.equals(HashMap2)无法工作的原因是因为"如果不编写自定义代码,就无法对Java的数组进行相同的测试."

我不明白这个原因.任何人都可以指导我一个精心设计的原因吗?

Ste*_*n C 31

equals上的Java阵列型方法等效于==,因为Java阵列"类"不覆盖Object.equals.

如果要"按值"比较数组,则需要使用适当的java.util.Arrays.equals(...)方法,或者自己实现.

如果你HashMap使用数组作为键或值,这将使equals行为奇怪(从你的角度来看).这就是链接文章所说的内容.但是,如果将数组用作键或值类,则数组语义影响HashMap.equals相等性.如果你不这样做,那么HashMap应该按预期工作.

(HashMap::equals类上相等的javadoc 有点涉及,但它们基本上归结为取两个入口集,比较它们的大小,然后做Map.当然,这很昂贵,但它应该适用于所有s1.containsAll(s2)正确的类实现Map界面.)


Eya*_*der 11

这篇文章是对的.只要可以使用相同的方法比较关键对象和值对象,就可以使用equals()方法安全地比较散列图.在本文中,映射值是数组,它们没有按预期实现equals().相反,使用ArrayList可以解决问题.