logo

Jak porównać dwie tablice w Javie?

W Javie możemy porównaj dwie tablice porównując każdy element tablicy. Jawa Tablice class udostępnia dwie predefiniowane metody, do których jest przyzwyczajona porównaj dwie tablice w Javie .

W tej części się dowiemy jak porównać dwie tablice za pomocą Tablice.equals() metoda i Arrays.deepEquals() metoda. Wraz z tym będziemy się również uczyć jak przeprowadzić głębokie porównanie między dwiema tablicami z odpowiednimi przykładami.

Dwie tablice są równe, jeśli:

  • Są tego samego typu.
  • Mają taką samą liczbę elementów.
  • Odpowiednie pary elementów w obu tablicach muszą być równe.
  • Kolejność elementów musi być taka sama.
  • Dwa odniesienia do tablicy są równe, jeśli mają wartość null.

Zanim przejdziesz do tematu, najpierw rozważ następujący przykład i odgadnij wynik.

TablicaEqualsPrzykład1.java

odlany w sql
 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.'); } } 

Wyjście:

 Arrays are not equal. 

W powyższym przykładzie a1 i a2 to dwa odniesienia do dwóch różnych obiektów. Porównując dwie zmienne referencyjne, otrzymujemy wynik Tablice nie są równe, podczas gdy obie tablice mają tę samą długość i mają te same elementy. Nie otrzymujemy żądanych wyników, ponieważ operator równości (==) porównuje je jako obiekt.

Teraz mamy tylko opcję porównania dwóch tablic, tj. porównaj zawartość (elementy) tablicy . Zobaczmy, jak porównać zawartość tablicy.

Dobrze będzie jeśli porównamy elementy jeden po drugim. Aby porównać zawartość tablicy Java Tablice class udostępnia następujące dwie metody porównywania dwóch tablic:

Java inaczej, jeśli
  • metoda równa().
  • Metoda deepEquals().

Metoda Arrays.equals().

Jawa Tablice klasa zapewnia równa się() metoda porównywania dwóch tablic. Wykonuje iterację po każdej wartości tablicy i porównuje elementy za pomocą metody równości().

Składnia:

jakie są wymiary ekranu mojego komputera
 public static boolean equals(int[] a1, int[] a2) 

Analizuje dwie tablice a1 i a2, które mają zostać porównane. Metoda zwraca wartość true, jeśli tablice są równe, w przeciwnym razie zwraca wartość false. The Klasa tablic zawiera listę przeciążonych metod równości() dla różnych typów pierwotnych i jedną dla typu Object.

Uwaga: Używając tablicy obiektów, nie zapomnij zastąpić metody równości(). W przeciwnym razie otrzymamy wynik zwrócony metodą równości() klasy Object.

TablicaEqualsPrzykład2.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.'); } } 

Wyjście:

 Arrays are equal. 

Zobaczmy inny przykład.

TablicaEqualsPrzykład3.java

kompozycja relacji
 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)); } } 

Wyjście:

 Are array1 and array2 equal? false Are array1 and array3 equal? true 

Widzimy, że Tablice.equals() Metoda porównuje elementy tablicy. Tutaj pojawia się pytanie, co jeśli tablica ma zagnieżdżoną tablicę lub inne odniesienia, które odnoszą się do innego obiektu, ale mają te same wartości.

Rozumiemy to na następującym przykładzie.

TablicaEqualsPrzykład4.java

 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.'); } } 

Wyjście:

 Arrays are not equal. 

W powyższym przykładzie widzimy, że metoda równości() nie jest w stanie przeprowadzić głębokiego porównania. Aby rozwiązać ten problem, klasa Java Arrays udostępnia inną metodę deepEquals(), która dokładnie porównuje dwie tablice.

Metoda Arrays.deepEquals().

Jawa Tablice class udostępnia inną metodę głębokieEquals() aby dokładnie porównać tablicę. W tym przypadku głębokie porównanie oznacza, że ​​może porównać dwie zagnieżdżone tablice o dowolnej głębokości. Dwie tablice odniesienia do obiektu e1 i e2 są głęboko równe, jeśli spełniają którykolwiek z poniższych warunków:

  • e1=e2
  • równa się (e2) zwraca wartość true.
  • Jeśli e1 i e2 są tego samego typu pierwotnego, przeciążenie metody Arrays.equals(e1, e2) zwraca wartość true.
  • Jeśli obie tablice e1 i e2 są tablicami typów odwołań do obiektów, metoda Arrays.deepEquals(e1, e2) zwraca wartość true.

Składnia:

 public static boolean deepEquals(Object[] a1, Object[] a2) 

Metoda analizuje dwie tablice a1 i a2, które mają zostać porównane. Zwraca wartość true, jeśli obie tablice są głęboko równe, w przeciwnym razie zwraca wartość false.

Iterator Java dla mapy

Stwórzmy program i dokładnie porównajmy dwie tablice za pomocą głębokieEquals() metoda klasy Arrays.

TablicaEqualsPrzykład5.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.'); } } 

Wyjście:

 Arrays are equal.