2011-10-23 32 views
9

Tengo dos matrices de tipo desconocido ... ¿hay una manera de comprobar los elementos son los mismos:Arrays Java comparando

public static boolean equals(Object a , Object b) { 
    if (a instanceof int[]) 
    return Arrays.equals((int[]) a, (int[])b); 
    if (a instanceof double[]){ 
    ////etc 
} 

quiero hacer esto sin todos los controles instanceof ....

+0

añadido algunas partes declaración de método (public static ...) - De lo contrario, me buscó como método de llamada ruby ​​con el bloque pasado :-) – Vladimir

Respuesta

16

ArrayUtils.isEquals() de Apache Commons hace exactamente eso. También maneja matrices multidimensionales.

+2

¿Hay algún beneficio para utilizar la biblioteca no principal para esto? Si no, es mejor ir con Arrays.equals estándar en su lugar. Simplemente no suelo confundir a las personas que miran la respuesta seleccionada. Se siente más natural usar un método estándar que el de Apache Commons. Elijo Arrays.equals en su lugar – Vladimir

+2

Bien, parece que el problema es que con Arrays.equals y Arrays.deepEquals no se pueden pasar matrices como objetos en ArrayUtils.isEquals - lo obtuve ahora. – Vladimir

11

Usted debe tratar Arrays.deepEquals(a, b)

0

Si el tipo de matriz no se conoce, no se puede convertir simplemente para Object[], y por lo tanto no pueden utilizar los métodos (equals, deepEquals) en java.util.Arrays.
Sin embargo, puede usar la reflexión para obtener la longitud y los elementos de las matrices, y compararlos recursivamente (los elementos pueden ser matrices).

Aquí es un método utilidad general para comparar dos objetos (también se admiten las matrices), que le permite a uno o incluso ambos a ser nulo:

public static boolean equals (Object a, Object b) { 
    if (a == b) { 
     return true; 
    } 
    if (a == null || b == null) { 
     return false; 
    } 
    if (a.getClass().isArray() && b.getClass().isArray()) { 

     int length = Array.getLength(a); 
     if (length > 0 && !a.getClass().getComponentType().equals(b.getClass().getComponentType())) { 
      return false; 
     } 
     if (Array.getLength(b) != length) { 
      return false; 
     } 
     for (int i = 0; i < length; i++) { 
      if (!equals(Array.get(a, i), Array.get(b, i))) { 
       return false; 
      } 
     } 
     return true; 
    } 
    return a.equals(b); 
}