Java Contains方法未提供正确的输出
我正在使用Java Contains方法未提供正确的输出,java,arraylist,contains,Java,Arraylist,Contains,我正在使用contains方法检查列表中是否存在给定的坐标。上述代码的输出应该是“Yes”,但我得到的是“NO”。有人能帮我吗 类点{ 公共int x; 公共智力; 公共点(整数x,整数y){ 这个.x=x; 这个。y=y; } } GFG类{ 公共静态void main(字符串[]args){ ArrayList点=新的ArrayList(); 点p=新点(1,1); 点q=新点(2,2); 增加(p)点; 增加(q)点; 如果(点包含(新点(1,1))){ System.out.printl
contains
方法检查列表中是否存在给定的坐标。上述代码的输出应该是“Yes”
,但我得到的是“NO”
。有人能帮我吗
类点{
公共int x;
公共智力;
公共点(整数x,整数y){
这个.x=x;
这个。y=y;
}
}
GFG类{
公共静态void main(字符串[]args){
ArrayList点=新的ArrayList();
点p=新点(1,1);
点q=新点(2,2);
增加(p)点;
增加(q)点;
如果(点包含(新点(1,1))){
System.out.println(“是”);
}
否则{
系统输出打印项次(“否”)``
}
}
}
对于包含的方法:
如果此列表包含指定的元素,则返回true。更多
形式上,当且仅当此列表至少包含一个
元素e使得(o==null?e==null:o.equals(e))
您尚未重写点
类方法equals
和hashcode
,因此包含的方法仍然引用对象equals
方法;因此,您正在比较两个坐标相等的对象的两个不同引用,然后解释了包含方法的的否定结果:
如果此列表包含指定的元素,则返回true。更多
形式上,当且仅当此列表至少包含一个
元素e使得(o==null?e==null:o.equals(e))
您尚未重写点
类方法equals
和hashcode
,因此包含的方法仍然引用对象equals
方法;因此,您将两个不同的引用与坐标相等的两个对象进行比较,然后解释了包含的否定结果X和Y坐标对于您要比较的对象是相同的,但对象彼此不同。请参见下面的屏幕截图,调试时,您可以看到对象的id。即使坐标相同,对象也不同:
p
是Main$points@487
但是sameOrNot
是Main$points@489
。所以,因为您直接比较对象,所以结果是错误的
要实现所需操作,需要在类中重写equals()
和hashCode()
,以指定坐标相同时,对象相同:
class points{
public int x;
public int y;
public points(int x,int y){
this.x=x;
this.y=y;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
points points = (points) o;
return x == points.x &&
y == points.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
}
要比较的对象的X和Y坐标相同,但对象彼此不同。请参见下面的屏幕截图,调试时,您可以看到对象的id。即使坐标相同,对象也不同:
p
是Main$points@487
但是sameOrNot
是Main$points@489
。所以,因为您直接比较对象,所以结果是错误的
要实现所需操作,需要在类中重写equals()
和hashCode()
,以指定坐标相同时,对象相同:
class points{
public int x;
public int y;
public points(int x,int y){
this.x=x;
this.y=y;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
points points = (points) o;
return x == points.x &&
y == points.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
}
您需要为points
类实现hashcode和equals方法。new关键字将创建一个新对象。尝试检查点。包含(p)点。包含(p)点给出正确答案。但是,问题仍然是,为什么这不起作用是的,谢谢代码模式!!您需要为points
类实现hashcode和equals方法。new关键字将创建一个新对象。尝试检查点。包含(p)点。包含(p)点给出正确答案。但是,问题仍然是,为什么这不起作用是的,谢谢代码模式!!这完全消除了我的疑虑。谢谢你,兄弟!!不客气,我很高兴这是有帮助的。)当你解决问题时,请考虑赞成或接受一个答案。这完全消除了我的疑虑。谢谢你,兄弟!!不客气,我很高兴这是有帮助的:请考虑投票或/接受一个答案,当它解决了你的问题。