[英]Java: Implementing equals method for comparing two double[][] arrays
我正在尝试在我的类中实现equals方法。.注意:'_ _data
'属性是double[][]
数组,我试图在两个对象之间进行比较。
无论如何它都可以编译,但是我总是得到一个错误的答案,这不可能是因为两个数组都是相同的:o
难道我做错了什么? 还有其他简单的方法吗? (仅使用对象类中的等于!!)
我的代码(JAVA):
public boolean equals(Object obj) {
if (!(obj instanceof MyClass)) {
return false;
}
MyClass myObj = (MyClass) obj;
return this._data.equals(myObj._data);
}
采用
Arrays.deepEquals(this._data, myObj._data)
在阵列上进行测试。
使用Arrays.deepEquals(data, myObj._data)
您可以看一下描述deepEquals
方法的deepEquals
: Java Arrays.equals()对于二维数组返回false
我将重写MyClass类中的equals方法。
@Override
public boolean equals(Object obj) {//if you insist in using an Object as argument instead of double[][]
if (!(obj instanceof MyClass)) {
return false;
}
MyClass myObj = (MyClass) obj;
if(_data.length == myObj._data.length){
for(int i=0; i<_data.length; i++){
if(_data[i].length == myObj._data[i].length){
for(int j=0; j<_data[i].length; j++){
if(_data[i][j] != myObj._data[i][j]){
return false;
}
}
}else{
return false;
}
}
}else{
return false;
}
return true;
}
这段代码考虑的情况是您将拥有一个二维数组,但没有一个正方形矩阵。 例如,第一行包含三个元素,第二行包含27个元素,第三行包含N个元素...例如,一个测试用例:
double[][] first= new double[5][3];
double[][] second= new double[5][3];
for(int i=0; i<first.length; i++){
for(int j=0; j<first[i].length; j++){
first[i][j] = 5;
}
}
for(int i=0; i<second.length; i++){
for(int j=0; j<second[i].length; j++){
second[i][j] = 5;
}
}
second[4][2] = 2;
MyClass c1 = new MyClass(first);
MyClass c2 = new MyClass(second);
System.out.println("Equals: "+c1.equals(c2));
Joshua Bloch在“有效Java”的第3章中告诉您如何实现equals和hashCode( 必须串联完成)。 那应该告诉您所有您需要了解的信息,以便覆盖班级的平等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.