logo

Ako porovnať dve polia v Jave?

V Jave môžeme porovnajte dve polia porovnaním každého prvku poľa. Java Polia poskytuje dve preddefinované metódy, na ktoré sa používa porovnajte dve polia v Jave .

V tejto časti sa naučíme ako porovnať dve polia použitím Arrays.equals() metóda a Arrays.deepEquals() metóda. Spolu s tým sa budeme aj učiť ako vykonať hlboké porovnanie medzi týmito dvoma poliami so správnymi príkladmi.

Dve polia sú rovnaké, ak:

  • Sú rovnakého typu.
  • Majú rovnaký počet prvkov.
  • Zodpovedajúce páry prvkov v oboch poliach musia byť rovnaké.
  • Poradie prvkov musí byť rovnaké.
  • Dva odkazy na pole sú rovnaké, ak sú null.

Predtým, ako prejdete k téme, najprv zvážte nasledujúci príklad a uhádnite výstup.

ArrayEqualsExample1.java

rozdiel medzi $ a $ $
 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ýkon:

 Arrays are not equal. 

Vo vyššie uvedenom príklade sú a1 a a2 dva odkazy na dva rôzne objekty. Keď porovnáme dve referenčné premenné, dostaneme výstup Polia nie sú rovnaké, pričom obe polia majú rovnakú dĺžku a majú rovnaké prvky. Nedostávame požadovaný výstup, pretože operátor rovná sa (==) ich porovnáva ako objekt.

Teraz máme len možnosť porovnať dve polia, t.j. porovnajte obsah (prvky) poľa . Pozrime sa, ako porovnať obsah poľa.

Bude dobré, ak si prvky porovnáme jeden po druhom. Na porovnanie obsahu poľa Java Polia trieda poskytuje nasledujúce dve metódy na porovnanie dvoch polí:

pole.z java
  • Metóda sa rovná().
  • metóda deepEquals().

Metóda Arrays.equals().

Java Polia trieda poskytuje rovná sa() metóda na porovnanie dvoch polí. Iteruje každú hodnotu poľa a porovnáva prvky pomocou metódy equals().

Syntax:

protokoly vrstvy dátového spojenia
 public static boolean equals(int[] a1, int[] a2) 

Analyzuje dve polia a1 a a2, ktoré sa majú porovnať. Metóda vráti hodnotu true, ak sú polia rovnaké, inak vráti hodnotu false. The Trieda Arrays má zoznam preťaženej metódy equals() pre rôzne primitívne typy a jednu pre typ objektu.

Poznámka: Pri používaní poľa objektov nezabudnite prepísať metódu equals(). V opačnom prípade dostaneme výstup vrátený metódou equals() triedy 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ýkon:

 Arrays are equal. 

Pozrime sa na ďalší príklad.

ArrayEqualsExample3.java

zreťazenie java reťazec
 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ýkon:

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

Vidíme, že Arrays.equals() metóda porovnáva prvky poľa. Tu vyvstáva otázka, čo ak má pole vnorené pole alebo nejaké iné odkazy, ktoré odkazujú na iný objekt, ale majú rovnaké hodnoty.

Poďme to pochopiť na nasledujúcom príklade.

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ýkon:

 Arrays are not equal. 

Vo vyššie uvedenom príklade vidíme, že metóda equals() nie je schopná vykonať hlboké porovnanie. Na vyriešenie tohto problému poskytuje trieda Java Arrays ďalšiu metódu deepEquals(), ktorá hlboko porovnáva tieto dve polia.

Metóda Arrays.deepEquals().

Java Polia trieda poskytuje inú metódu deepEquals() na hlboké porovnanie poľa. Hlboké porovnanie tu znamená, že môže porovnať dve vnorené polia ľubovoľnej hĺbky. Odkaz na objekt dvoch polí e1 a e2 sú úplne rovnaké, ak majú niektorú z nasledujúcich podmienok:

  • e1=e2
  • rovná sa (e2) vráti hodnotu true.
  • Ak sú e1 a e2 rovnakého primitívneho typu, preťaženie metódy Arrays.equals(e1, e2) vráti hodnotu true.
  • Ak sú e1 a e2 obe polia typov referencií na objekt, metóda Arrays.deepEquals(e1, e2) vráti hodnotu true.

Syntax:

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

Metóda analyzuje dve polia a1 a a2, ktoré sa majú porovnať. Ak sú obe polia úplne rovnaké, vráti hodnotu true, inak vráti hodnotu false.

pawandeep rajan

Poďme vytvoriť program a hlboko porovnať dve polia pomocou deepEquals() metóda triedy 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ýkon:

 Arrays are equal.