Em Java, podemos comparar duas matrizes comparando cada elemento da matriz. Java Matrizes classe fornece dois métodos predefinidos que são usados para compare duas matrizes em Java .
Nesta seção, aprenderemos como comparar dois arrays usando Matrizes.equals() método e Arrays.deepEquals() método. Junto com isso, também aprenderemos como realizar uma comparação profunda entre os dois arrays com exemplos adequados.
Duas matrizes são iguais se:
- Eles são do mesmo tipo.
- Eles têm um número igual de elementos.
- Os pares correspondentes de elementos em ambas as matrizes devem ser iguais.
- A ordem dos elementos deve ser a mesma.
- Duas referências de array são iguais se forem nulas.
Antes de passar para o tópico, primeiro considere o exemplo a seguir e adivinhe o resultado.
ArrayEqualsExample1.java
ordem lexicográfica
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.'); } }
Saída:
Arrays are not equal.
No exemplo acima, a1 e a2 são as duas referências de dois objetos diferentes. Quando comparamos duas variáveis de referência, obtemos a saída Matrizes não são iguais, enquanto ambas as matrizes têm o mesmo comprimento e os mesmos elementos. Não estamos obtendo a saída desejada porque o operador igual (==) os compara como um objeto.
Agora, temos apenas a opção de comparar duas matrizes, ou seja, compare o conteúdo (elementos) do array . Vamos ver como comparar o conteúdo do array.
Será bom compararmos os elementos um por um. Para comparar o conteúdo do array Java Matrizes class fornece os dois métodos a seguir para comparar duas matrizes:
char para string
- Método igual()
- Método deepEquals()
Método Arrays.equals()
Java Matrizes classe fornece o é igual a() método para comparar duas matrizes. Ele itera sobre cada valor de um array e compara os elementos usando o método equals().
Sintaxe:
public static boolean equals(int[] a1, int[] a2)
Ele analisa duas matrizes a1 e a2 que devem ser comparadas. O método retorna verdadeiro se os arrays forem iguais, caso contrário retorna falso. O Classe de matrizes tem uma lista de métodos equals() sobrecarregados para diferentes tipos primitivos e uma para um tipo de objeto.
Nota: Ao usar o array de objetos, não se esqueça de substituir o método equals(). Caso contrário, obteremos a saída retornada pelo método equals() da classe Object.
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.'); } }
Saída:
Arrays are equal.
Vejamos outro exemplo.
tipos de loop for
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)); } }
Saída:
Are array1 and array2 equal? false Are array1 and array3 equal? true
Vemos que o Matrizes.equals() método compara os elementos do array. Aqui, surge uma questão: e se um array tiver um array aninhado ou alguma outra referência que se refira a objetos diferentes, mas tenha os mesmos valores.
Vamos entender isso através do exemplo a seguir.
ArrayEqualsExample4.java
menu suspenso javascript
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.'); } }
Saída:
Arrays are not equal.
No exemplo acima, vemos que o método equals() não é capaz de realizar uma comparação profunda. Para resolver esse problema, a classe Java Arrays fornece outro método deepEquals() que compara profundamente os dois arrays.
Método Arrays.deepEquals()
Java Matrizes classe fornece outro método deepEquals() para comparar profundamente a matriz. Aqui, comparar profundamente significa que pode comparar duas matrizes aninhadas de profundidade arbitrária. Duas matrizes de referência de objeto e1 e e2 são profundamente iguais se mantiverem qualquer uma das seguintes condições:
- e1=e2
- igual(e2) retorna verdadeiro.
- Se e1 e e2 forem do mesmo tipo primitivo, a sobrecarga do método Arrays.equals(e1, e2) retornará verdadeiro.
- Se e1 e e2 forem matrizes de tipos de referência de objeto, o método Arrays.deepEquals(e1, e2) retornará verdadeiro.
Sintaxe:
java adicionar a um array
public static boolean deepEquals(Object[] a1, Object[] a2)
O método analisa as duas matrizes a1 e a2 que devem ser comparadas. Ele retorna verdadeiro se ambas as matrizes forem profundamente iguais, caso contrário, retorna falso.
Vamos criar um programa e comparar profundamente dois arrays usando o deepEquals() método da classe 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.'); } }
Saída:
Arrays are equal.