Java:实现equals方法来比较两个double [] []数组

时间:2011-12-07 22:57:42

标签: java arrays object equals

我正在尝试在我的班级中实现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);
}

5 个答案:

答案 0 :(得分:8)

使用

Arrays.deepEquals(this._data, myObj._data) 

对阵列进行测试。

答案 1 :(得分:5)

使用Arrays.deepEquals(data, myObj._data)

答案 2 :(得分:2)

您可以查看介绍deepEquals方法的帖子:Java Arrays.equals() returns false for two dimensional arrays

答案 3 :(得分:0)

我会覆盖你的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));

答案 4 :(得分:0)

Joshua Bloch告诉你如何在“Effective Java”的chapter 3中实现equals和hashCode(它们必须串联完成)。这应该告诉你所有你需要知道的,以便覆盖你的班级的等于。