Sim*_*ely 1 java collections hash equals object
我不懂Java中的傻事,希望你能为我清理它.
我已经定义了 Hashset<Point> myHashSet = new HashSet<Point>();
然后,我创建两个相等的Point点,Point p1 and Point p2
并将它们放在不同的变量/内存位置.然后我重写.equals()方法public boolean equals(Point other)
,并将我的第一个点p1添加到HashSet.
然后我打电话 System.out.println(myHashSet.contains(p2)); // prints false
为什么编译器不能从创建它时推断"哦,这个hashset是Point类型"并说"我应该检查一下Point是否覆盖了默认的equals方法......是的,让我们调用那个!" .
相反,我相信它会调用对象的通用equals方法,因此比较内存位置,我相信?
这样做的原因是HashSet可以包含Point的子类,它使用不同的Equals方法吗?这是我能看到当前行为的唯一原因,虽然我确信我忽略了一些东西:).非常感谢.
使用Object.equals(Object)
您必须覆盖的集合.如果你创建另一个方法,equals(Point)
它就不会调用它.
相反,我相信它会调用对象的通用equals方法,因此比较内存位置,我相信?
是的,因为唯一HashSet
可以通用的方法是equals(Object)
这样做的原因是HashSet可以包含Point的子类,它使用不同的Equals方法吗?
HashSet无法知道您希望在运行时使用此方法.
归档时间: |
|
查看次数: |
120 次 |
最近记录: |