logo

Jak porovnat dvě pole v Javě?

V Javě můžeme porovnat dvě pole porovnáním každého prvku pole. Jáva Pole třída poskytuje dvě předdefinované metody, na které se používá porovnejte dvě pole v Javě .

V této části se naučíme jak porovnat dvě pole použitím Arrays.equals() metoda a Arrays.deepEquals() metoda. Spolu s tím se také naučíme jak provést hluboké srovnání mezi dvěma poli se správnými příklady.

Dvě pole jsou stejná, pokud:

  • Jsou stejného typu.
  • Mají stejný počet prvků.
  • Odpovídající dvojice prvků v obou polích se musí rovnat.
  • Pořadí prvků musí být stejné.
  • Dva odkazy na pole jsou stejné, pokud jsou null.

Než přejdete k tématu, nejprve zvažte následující příklad a odhadněte výstup.

ArrayEqualsExample1.java

základní otázky java interview
 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.'); } } 

Výstup:

 Arrays are not equal. 

Ve výše uvedeném příkladu jsou a1 a a2 dvě reference dvou různých objektů. Když porovnáme dvě referenční proměnné, dostaneme výstup Pole nejsou stejné, zatímco obě pole jsou stejně dlouhá a mají stejné prvky. Nedostáváme požadovaný výstup, protože operátor rovná se (==) je porovnává jako objekt.

Nyní máme pouze možnost porovnat dvě pole, tzn. porovnejte obsah (prvky) pole . Podívejme se, jak porovnat obsah pole.

Bude dobré, když prvky porovnáme jeden po druhém. Chcete-li porovnat obsah pole Java Pole třída poskytuje následující dvě metody pro porovnání dvou polí:

q1 q2 q3 q4
  • Metoda equals().
  • metoda deepEquals().

Metoda Arrays.equals().

Jáva Pole třída poskytuje rovná se() metoda pro porovnání dvou polí. Iteruje každou hodnotu pole a porovnává prvky pomocí metody equals().

Syntax:

 public static boolean equals(int[] a1, int[] a2) 

Analyzuje dvě pole a1 a a2, která mají být porovnána. Metoda vrací true, pokud jsou pole stejná, jinak vrací false. The Třída pole má seznam přetížených metody equals() pro různé primitivní typy a jednu pro typ Object.

Poznámka: Při používání pole objektů nezapomeňte přepsat metodu equals(). Jinak dostaneme výstup vrácený metodou equals() třídy 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.'); } } 

Výstup:

pandy a numpy
 Arrays are equal. 

Podívejme se na další příklad.

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

Výstup:

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

Vidíme, že Arrays.equals() metoda porovnává prvky pole. Zde vyvstává otázka, co když má pole vnořené pole nebo nějaké jiné odkazy, které odkazují na jiný objekt, ale mají stejné hodnoty.

Pojďme to pochopit pomocí následujícího příkladu.

javafx na Eclipse

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

Výstup:

 Arrays are not equal. 

Ve výše uvedeném příkladu vidíme, že metoda equals() není schopna provést hluboké srovnání. K vyřešení tohoto problému poskytuje třída Java Arrays další metodu deepEquals(), která hluboce porovnává dvě pole.

Metoda Arrays.deepEquals().

Jáva Pole třída poskytuje jinou metodu deepEquals() hluboce porovnat pole. Hluboce porovnat zde znamená, že může porovnat dvě vnořená pole libovolné hloubky. Odkaz na objekt dvou polí e1 a e2 jsou zcela stejné, pokud splňují některou z následujících podmínek:

filmy 123 až
  • e1=e2
  • equals(e2) vrací true.
  • Pokud jsou e1 a e2 oba stejného primitivního typu, přetížení metody Arrays.equals(e1, e2) vrátí hodnotu true.
  • Pokud jsou e1 a e2 obě pole typů objektových odkazů, metoda Arrays.deepEquals(e1, e2) vrátí hodnotu true.

Syntax:

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

Metoda analyzuje dvě pole a1 a a2, která má být porovnána. Vrací hodnotu true, pokud jsou obě pole hluboce shodná, jinak vrací hodnotu false.

Pojďme vytvořit program a hluboce porovnat dvě pole pomocí deepEquals() metoda třídy 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.'); } } 

Výstup:

 Arrays are equal.