logo

Como comparar dois arrays em Java?

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.