两个2D串阵列的比较具有不同尺寸

问题描述:

我有以下的2维阵列:两个2D串阵列的比较具有不同尺寸

String[][] array1 = {{"hello", "hi"}{"bye", "two"}}; 
String[][] array2 = {{"hello", "hi", "three"}{"bye", "maybe", "third"}, {"3", "rd", "Element"}}; 
String[][] array3 = {{"hello", "hi"}{"bye", "two"}}; 

如何检查,它们是否具有相同的值或不(大小不同)?由于

Arrays.deepEquals()

public static boolean deepEquals(Object[] a1, Object[] a2)

返回true如果两个指定数组深感彼此相等。与equals(Object[],Object[])方法不同,此方法适用于任意深度的嵌套数组。

两个数组引用被认为是深等于如果两者都为空,或者如果它们是指包含相同数目的元件的阵列和在两个阵列元件的所有相应对深感相等。

两个可能null元素e1e2是深层相等如果任一下列条件成立:

  • e1和e2是对象引用类型的数组,并且Arrays.deepEquals(E1,E2)将返回true
  • e1和e2是相同基元类型的数组,并且Arrays.equals(e1,e2)的适当重载将返回true。
  • E1 == E2
  • e1.equals(E2)将返回true。

请注意,此定义支持任意深度的null元素。

如果任一指​​定的阵列的包含自身作为元素直接或间接地通过阵列中的一个或多个级别的,这种方法的行为是未定义的。

你也可以创建自己的方法:

public boolean compare(String[][] a, String[][] b){ 
    boolean result = true; 
    int outer = Math.max(a.length, b.length); 
    int inner = Math.max(a[0].length, b[0].length); 

    for(int i = 0; i<outer; i++){ 
     for(int j = 0; j<inner; j++){ 
      if(i < a.length && i < b.length && j < a[0].length && j < b[0].length){ 
       if(!a[i][j].equals(b[i][j])){ 
        result = false; 
       } 
      } 
     } 
    } 
    return result; 
} 
+0

当然可以 - 一切都取决于你是否正在试图解决这个问题,对于现实世界中的问题,或者试图解决这个问题作为一个智力锻炼。 :-) – 2012-04-19 22:02:12