gpt4 book ai didi

java - Set 不适用于覆盖的 equals

转载 作者:行者123 更新时间:2023-12-02 07:52:13 25 4
gpt4 key购买 nike

我试图使用集合。所以我尝试了这种方式

HashSet set=new HashSet();
Points p1 = new Points(10, 20);
Points p2 = new Points(10, 20);
System.out.println(set.add(p1)); // output true
System.out.println(set.add(p2)); // output false

我知道我的第一个输出将为 true,第二个输出将为 false,因为 Set 不允许重复元素。而且,我还知道 Set 通过使用 equals(Object o) 方法来实现这一点。它来自具有以下签名的 java Object 类。

public boolean equals(Object o) {}

为了更深入地测试这一点,我编写了自己的类

class testSet{
private int x;
private int y;
public testSet(int xa, int ya){
this.x=xa;
this.y=ya;
}
@Override
public boolean equals(Object o){
if (o instanceof testSet){
testSet ts=(testSet)o;
return ts.x==this.x && ts.y==this.y;
}
return false;
}
}

现在我期望以下代码的行为与 Point 类相同

HashSet set=new HashSet();
testSet set_a=new testSet(3,4);
testSet set_b=new testSet(3,4);
System.out.println(set.add(set_a)); //output expected true
System.out.println(set.add(set_b)); //output expected false

所以我期望第一个输出为 true ,第二个输出为 false 。但对于这两种情况它总是返回 true。但确实为点级工作。我尝试了以下两个点实现

android.graphics.Point
java.awt.point

那我做错了什么?感谢您的帮助。

最佳答案

您需要覆盖hashCode以及equalshashCode 的一般约定是,如果两个对象相等(在 equals 的意义上),则它们具有相同的哈希码。

关于java - Set 不适用于覆盖的 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9134254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com