logo

Kako primerjati dve matriki v Javi?

V Javi lahko primerjaj dva niza s primerjavo vsakega elementa niza. Java Nizi ponuja dve vnaprej določeni metodi, ki se uporabljata za primerjajte dve nizi v Javi .

V tem razdelku se bomo naučili kako primerjati dva polja uporabo Arrays.equals() metoda in Arrays.deepEquals() metoda. Ob tem se bomo tudi učili kako izvesti globoko primerjavo med dvema nizoma z ustreznimi primeri.

Dva niza sta enaka, če:

  • So iste vrste.
  • Imajo enako število elementov.
  • Ustrezni pari elementov v obeh nizih morajo biti enaki.
  • Vrstni red elementov mora biti enak.
  • Dva sklica na niz sta enaka, če sta ničelna.

Preden preidete na temo, najprej razmislite o naslednjem primeru in uganite rezultat.

ArrayEqualsExample1.java

python pretvori bajte v niz
 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.'); } } 

Izhod:

 Arrays are not equal. 

V zgornjem primeru sta a1 in a2 dve referenci dveh različnih predmetov. Ko primerjamo dve referenčni spremenljivki, dobimo rezultat Nizi niso enaki, medtem ko sta oba niza enako dolga in imata enake elemente. Ne dobimo želenega rezultata, ker jih operator enako (==) primerja kot objekt.

Zdaj imamo samo možnost primerjave dveh nizov, tj. primerjati vsebino (elemente) polja . Poglejmo, kako primerjamo vsebino matrike.

Dobro bo, če primerjamo elemente enega za drugim. Za primerjavo vsebine polja Java Nizi razred ponuja naslednji dve metodi za primerjavo dveh nizov:

niz za char
  • enako () Metoda
  • metoda deepEquals().

Metoda Arrays.equals().

Java Nizi razred zagotavlja enako () metoda za primerjavo dveh nizov. Ponavlja vsako vrednost matrike in primerja elemente z uporabo metode equals().

Sintaksa:

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

Razčleni dve matriki a1 in a2, ki ju je treba primerjati. Metoda vrne true, če so nizi enaki, sicer vrne false. The Razred nizov ima seznam preobremenjene metode equals() za različne primitivne tipe in enega za tip predmeta.

Opomba: Ko uporabljate matriko predmetov, ne pozabite preglasiti metode equals(). V nasprotnem primeru bomo dobili izhod, ki ga vrne metoda equals() razreda 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.'); } } 

Izhod:

 Arrays are equal. 

Poglejmo še en primer.

izbriši zadnjo objavo git

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

Izhod:

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

Vidimo, da je Arrays.equals() metoda primerja elemente matrike. Tukaj se pojavi vprašanje, kaj če ima matrika ugnezdeno matriko ali kakšne druge reference, ki se nanašajo na drug objekt, vendar imajo enake vrednosti.

Razumejmo to skozi naslednji primer.

ArrayEqualsExample4.java

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

Izhod:

 Arrays are not equal. 

V zgornjem primeru vidimo, da metoda equals() ne more izvesti globoke primerjave. Za rešitev te težave nudi razred Java Arrays drugo metodo deepEquals(), ki globoko primerja obe matriki.

Metoda Arrays.deepEquals().

Java Nizi razred ponuja drugo metodo deepEquals() za globoko primerjavo niza. Tukaj globoka primerjava pomeni, da lahko primerja dve ugnezdeni nizi poljubne globine. Dve sklici na objekt matrike e1 in e2 sta globoko enaki, če izpolnjujeta katerega koli od naslednjih pogojev:

  • e1=e2
  • equals(e2) vrne true.
  • Če sta e1 in e2 oba istega primitivnega tipa, preobremenitev metode Arrays.equals(e1, e2) vrne true.
  • Če sta e1 in e2 oba niza referenčnih tipov objektov, vrne metoda Arrays.deepEquals(e1, e2) true.

Sintaksa:

zamenjava niza v Javi
 public static boolean deepEquals(Object[] a1, Object[] a2) 

Metoda razčleni dve matriki a1 in a2, ki ju je treba primerjati. Vrne true, če sta obe matriki zelo enaki, sicer vrne false.

Ustvarimo program in globoko primerjajmo dve nizi z uporabo deepEquals() metoda razreda 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.'); } } 

Izhod:

 Arrays are equal.