logo

Kuinka verrata kahta taulukkoa Javassa?

Javalla voimme vertaa kahta taulukkoa vertaamalla taulukon jokaista elementtiä. Java Taulukot luokka tarjoaa kaksi ennalta määritettyä menetelmää, joihin on tottunut vertaa kahta taulukkoa Javassa .

Tässä osiossa opimme kuinka vertailla kahta taulukkoa käyttämällä Arrays.equals() menetelmä ja Arrays.deepEquals() menetelmä. Tämän ohella opimme myös kuinka tehdä syvä vertailu kahden taulukon välillä oikeilla esimerkeillä.

Kaksi taulukkoa ovat yhtä suuret, jos:

  • Ne ovat samaa tyyppiä.
  • Niissä on yhtä monta elementtiä.
  • Molemmissa matriisissa vastaavien elementtiparien on oltava yhtä suuret.
  • Elementtien järjestyksen on oltava sama.
  • Kaksi taulukkoviittausta ovat yhtä suuret, jos ne ovat nolla.

Ennen kuin siirryt aiheeseen, harkitse ensin seuraavaa esimerkkiä ja arvaa tulos.

ArrayEqualsExample1.java

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

Lähtö:

 Arrays are not equal. 

Yllä olevassa esimerkissä a1 ja a2 ovat kahden eri kohteen kaksi viittausta. Kun vertaamme kahta viitemuuttujaa, saamme tuloksen Taulukot eivät ole tasa-arvoisia, kun taas molemmat taulukot ovat yhtä pitkiä ja niissä on samat elementit. Emme saa haluttua tulosta, koska yhtä kuin (==) -operaattori vertaa niitä objektina.

Nyt meillä on vain mahdollisuus verrata kahta taulukkoa, ts. vertaa taulukon sisältöä (elementtejä). . Katsotaan kuinka verrata taulukon sisältöä.

On hyvä, jos vertaamme elementtejä yksitellen. Vertaile Java-taulukon sisältöä Taulukot luokka tarjoaa seuraavat kaksi menetelmää kahden taulukon vertaamiseen:

tuplaa javassa
  • equals() -menetelmä
  • deepEquals() -menetelmä

Arrays.equals() -menetelmä

Java Taulukot luokka tarjoaa on yhtä suuri () tapa vertailla kahta taulukkoa. Se toistaa taulukon jokaisen arvon ja vertaa elementtejä equals()-menetelmällä.

Syntaksi:

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

Se jäsentää kaksi taulukkoa a1 ja a2, joita on tarkoitus verrata. Metodi palauttaa tosi, jos taulukot ovat yhtä suuret, muussa tapauksessa palauttaa epätosi. The Arrays-luokka on luettelo overloaded equals() -metodeista eri primitiivityypeille ja yksi objektityypille.

Huomautus: Kun käytät objektijoukkoa, älä unohda ohittaa equals()-metodia. Muussa tapauksessa saamme tulosteen Object-luokan equals()-metodilla.

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

Lähtö:

 Arrays are equal. 

Katsotaanpa toinen esimerkki.

kokeile catch block java

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

Lähtö:

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

Näemme, että Arrays.equals() menetelmä vertaa taulukon elementtejä. Tässä herää kysymys, että entä jos taulukossa on sisäkkäisiä taulukoita tai muita viittauksia, jotka viittaavat eri objektiin, mutta joilla on samat arvot.

Ymmärretään se seuraavan esimerkin kautta.

ArrayEqualsExample4.java

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

Lähtö:

 Arrays are not equal. 

Yllä olevassa esimerkissä näemme, että equals()-menetelmä ei pysty suorittamaan syvällistä vertailua. Tämän ongelman ratkaisemiseksi Java Arrays -luokka tarjoaa toisen menetelmän deepEquals(), joka vertaa syvällisesti kahta taulukkoa.

Arrays.deepEquals() -menetelmä

Java Taulukot luokka tarjoaa toisen menetelmän deepEquals() vertailla taulukkoa syvällisesti. Tässä syvävertailu tarkoittaa, että se voi verrata kahta sisäkkäistä taulukkoa, joiden syvyys on mielivaltainen. Kaksi taulukon objektiviittausta e1 ja e2 ovat täysin yhtä suuret, jos niillä on jokin seuraavista ehdoista:

  • e1=e2
  • equals(e2) palauttaa tosi.
  • Jos e1 ja e2 ovat molemmat samaa primitiivityyppiä, menetelmän Arrays.equals(e1, e2) ylikuormitus palauttaa arvon tosi.
  • Jos e1 ja e2 ovat molemmat objektiviittaustyyppien taulukoita, menetelmä Arrays.deepEquals(e1, e2) palauttaa arvon tosi.

Syntaksi:

äärellisen tilan kone
 public static boolean deepEquals(Object[] a1, Object[] a2) 

Menetelmä jäsentää kaksi taulukkoa a1 ja a2, joita on tarkoitus verrata. Se palauttaa tosi, jos molemmat taulukot ovat täysin yhtä suuret, muussa tapauksessa palauttaa epätosi.

Luodaan ohjelma ja verrataan kahta taulukkoa syvällisesti käyttämällä deepEquals() Arrays-luokan menetelmä.

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

Lähtö:

 Arrays are equal.