una posiciones objetos matriz matrices libreria elementos contenido comparar como clase arreglos array java arrays compare primitive-types

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.