posiciones - comparar elementos de un array java
¿Comparar dos matrices de primitivas en Java? (3)
Sé sobre Arrays.deepEquals (Objeto [], Objeto []), pero esto no funciona para los tipos primitivos (debido a las limitaciones de los arreglos y el autoboxing, consulte esta publicación relacionada ).
Con esto en mente, ¿es este el enfoque más eficiente?
boolean byteArrayEquals(byte[] a, byte[] b) {
if (a == null && b == null)
return true;
if (a == null || b == null)
return false;
if (a.length != b.length)
return false;
for (int i = 0; i < a.length; i++) {
if (a[i] != b[i])
return false;
}
return true;
}
Cambia tu primera comparación por ser:
if (a == b)
return true;
Esto no solo atrapa los casos "ambos nulos", sino también el caso "compara una matriz con sí mismo".
Sin embargo, para una alternativa más simple, use Arrays.equals
que tiene sobrecargas para cada tipo primitivo. (La implementación es muy similar a la suya, excepto que eleva la longitud del arreglo fuera del bucle. En .NET eso puede ser una anti-optimización, pero creo que los implementadores de la biblioteca JRE probablemente saben mejor para la JVM :)
Creo que lo más eficiente debería ser usar los métodos de ayuda en la clase Arrays , porque podrían implementarse de manera más inteligente. Así que en este caso, use
Arrays.equals(a, b);
No sé si esto ayudará a alguien, pero esto parece estar funcionando:
if(type == type_BooleanArray) {
boolean eq = Arrays.equals((boolean[]) thisObj, (boolean[]) thatObj);
if(!eq) {
return false;
}
} else if(type == type_ByteArray) {
boolean eq = Arrays.equals((byte[]) thisObj, (byte[]) thatObj);
if(!eq) {
return false;
}
} else if(type == type_ShortArray) {
boolean eq = Arrays.equals((short[]) thisObj, (short[]) thatObj);
if(!eq) {
return false;
}
} else if(type == type_CharArray) {
boolean eq = Arrays.equals((char[]) thisObj, (char[]) thatObj);
if(!eq) {
return false;
}
} else if(type == type_IntArray) {
boolean eq = Arrays.equals((int[]) thisObj, (int[]) thatObj);
if(!eq) {
return false;
}
} else if(type == type_LongArray) {
boolean eq = Arrays.equals((long[]) thisObj, (long[]) thatObj);
if(!eq) {
return false;
}
} else if(type == type_FloatArray) {
boolean eq = Arrays.equals((float[]) thisObj, (float[]) thatObj);
if(!eq) {
return false;
}
} else if(type == type_DoubleArray) {
boolean eq = Arrays.equals((double[]) thisObj, (double[]) thatObj);
if(!eq) {
return false;
}
} else {
if(!thisObj.equals(thatObj)) {
return false;
}
}
Aparentemente array.equals(otherArray)
hace un array == otherArray
, y no lo que usted esperaría.