En Java podemos comparar dos matrices comparando cada elemento de la matriz. Java matrices La clase proporciona dos métodos predefinidos que se utilizan para comparar dos matrices en Java .
En esta sección aprenderemos cómo comparar dos matrices usando matrices.equals() método y Arrays.deepEquals() método. Junto con esto, también aprenderemos cómo realizar una comparación profunda entre las dos matrices con ejemplos adecuados.
Dos matrices son iguales si:
- Son del mismo tipo.
- Tienen igual número de elementos.
- Los pares de elementos correspondientes en ambas matrices deben ser iguales.
- El orden de los elementos debe ser el mismo.
- Dos referencias de matriz son iguales si son nulas.
Antes de pasar al tema, primero considere el siguiente ejemplo y adivine el resultado.
ArrayEqualsExample1.java
descomprimir en Linux
public class ArrayEqualsExample1 { public static void main (String[] args) { //defining arrays to be compare int[] a1 = new int[] {1, 2, 3, 4, 5, 6, 7, 8}; int[] a2 = new int[] {1, 2, 3, 4, 5, 6, 7, 8}; //comparing references using == operator //works the same as a1.equals(a2) if (a1 == a2) System.out.println('Arrays are equal.'); else System.out.println('Arrays are not equal.'); } }
Producción:
Arrays are not equal.
En el ejemplo anterior, a1 y a2 son las dos referencias de dos objetos diferentes. Cuando comparamos dos variables de referencia, obtenemos el resultado Las matrices no son iguales, mientras que ambas matrices tienen la misma longitud y tienen los mismos elementos. No obtenemos el resultado deseado porque el operador igual (==) los compara como un objeto.
Ahora, solo tenemos una opción para comparar dos matrices, es decir comparar el contenido (elementos) de la matriz . Veamos cómo comparar el contenido de la matriz.
Será bueno si comparamos los elementos uno por uno. Para comparar el contenido de la matriz Java matrices La clase proporciona los dos métodos siguientes para comparar dos matrices:
cadena un int
- método igual()
- Método deepEquals()
Método Arrays.equals()
Java matrices clase proporciona la es igual() Método para comparar dos matrices. Itera sobre cada valor de una matriz y compara los elementos utilizando el método equals().
Sintaxis:
public static boolean equals(int[] a1, int[] a2)
Analiza dos matrices a1 y a2 que se van a comparar. El método devuelve verdadero si las matrices son iguales; en caso contrario, devuelve falso. El clase de matrices tiene una lista de métodos iguales() sobrecargados para diferentes tipos primitivos y uno para un tipo de objeto.
Nota: Mientras usa la matriz de objetos, no olvide anular el método equals(). De lo contrario, obtendremos el resultado devuelto por el método igual () de la clase Objeto.
ArrayEqualsExample2.java
import java.util.Arrays; public class ArrayEqualsExample2 { public static void main (String[] args) { //defining array to compare int[] array1 = new int[] {'a', 'b', 'c', 'd', 'e'}; int[] array2 = new int[] {'a', 'b', 'c', 'd', 'e'}; //comparing two arrays using equals() method if (Arrays.equals(array1, array2)) System.out.println('Arrays are equal.'); else System.out.println('Arrays are not equal.'); } }
Producción:
Arrays are equal.
Veamos otro ejemplo.
lanzar int a cadena
ArrayEqualsExample3.java
import java.util.Arrays; public class ArrayEqualsExample3 { public static void main (String[] args) { //defining arrays to compare int[] array1 = new int [] {21, 32, 36, 47}; int[] array2 = new int [] {11, 22, 33, 44}; int[] array3 = new int [] {21, 32, 36, 47}; System.out.println('Are array1 and array2 equal?' + Arrays.equals(array1, array2)); System.out.println('Are array1 and array3 equal?' + Arrays.equals(array1, array3)); } }
Producción:
Are array1 and array2 equal? false Are array1 and array3 equal? true
Vemos que el matrices.equals() El método compara los elementos de la matriz. Aquí, surge la pregunta de ¿qué pasa si una matriz tiene una matriz anidada o algunas otras referencias que se refieren a objetos diferentes pero tienen los mismos valores?
Entendámoslo a través del siguiente ejemplo.
ArrayEqualsExample4.java
gimp guardar como jpeg
import java.util.Arrays; public class ArrayEqualsExample4 { public static void main (String[] args) { //defining array to compare String[] inarray1 = new String[] {'mango', 'grapes', 'plum', 'watermelon', 'apple'}; String[] inarray2 = new String[] {'mango', 'grapes', 'plum', 'watermelon', 'apple'}; Object[] array1 = {inarray1}; // array1 have only one element Object[] array2 = {inarray2}; // array2 also have only one element //comparing two arrays using equals() method if (Arrays.equals(array1, array2)) System.out.println('Arrays are equal.'); else System.out.println('Arrays are not equal.'); } }
Producción:
Arrays are not equal.
En el ejemplo anterior, vemos que el método equals() no puede realizar una comparación profunda. Para resolver este problema, la clase Java Arrays proporciona otro método deepEquals() que compara profundamente las dos matrices.
Método Arrays.deepEquals()
Java matrices la clase proporciona otro método profundoEquals() para comparar profundamente la matriz. Aquí, comparar profundamente significa que puede comparar dos matrices anidadas de profundidad arbitraria. Dos matrices de referencia de objetos e1 y e2 son profundamente iguales si cumplen alguna de las siguientes condiciones:
- e1=e2
- es igual a (e2) devuelve verdadero.
- Si e1 y e2 son ambos del mismo tipo primitivo, la sobrecarga del método Arrays.equals(e1, e2) devuelve verdadero.
- Si e1 y e2 son matrices de tipos de referencia de objetos, el método Arrays.deepEquals(e1, e2) devuelve verdadero.
Sintaxis:
tipos de pruebas
public static boolean deepEquals(Object[] a1, Object[] a2)
El método analiza las dos matrices a1 y a2 que se van a comparar. Devuelve verdadero si ambas matrices son profundamente iguales; en caso contrario, devuelve falso.
Creemos un programa y comparemos profundamente dos matrices usando el profundoEquals() método de la clase Arrays.
ArrayEqualsExample5.java
import java.util.Arrays; public class ArrayEqualsExample5 { public static void main (String[] args) { //defining array to compare String[] inarray1 = new String[] {'mango', 'grapes', 'plum', 'watermelon', 'apple'}; String[] inarray2 = new String[] {'mango', 'grapes', 'plum', 'watermelon', 'apple'}; Object[] array1 = {inarray1}; // array1 have only one element Object[] array2 = {inarray2}; // array2 also have only one element //comparing two arrays using equals() method if (Arrays.deepEquals(array1, array2)) System.out.println('Arrays are equal.'); else System.out.println('Arrays are not equal.'); } }
Producción:
Arrays are equal.