Sådan sammenlignes to arrays i Java
Sådan sammenlignes to arrays i Java | Array-programmer i Java – 8 | I det forrige Java-program finder vi summen af to matrixelementer. Nu i dette indlæg vil vi se, hvordan man sammenligner to arrays i Java.
Sammenlign to arrays i Java :- Hvis to arrays har samme reference eller samme længde og de indeholder lignende elementer, så er begge arrays ens, ellers er de ikke ens.
Sammenlign ved at bruge ==Operatør
Operatoren ==sammenligner to arrays baseret på referencen. Hvis begge arrays indeholder en lignende reference, er de ens.
public class CompareArray {
// main method
public static void main(String[] args) {
// declare and initialize arrays
int arr1[] = {10,20,30,40,50};
int arr2[] = arr1;
int arr3[] = {10,20,30,40,50};
int arr4[] = {15,25,35,45,55};
// compare arrays using == operator
// compare arr1 and arr2
if(arr1 == arr2)
System.out.println("arr1 & arr2 are same");
else
System.out.println("arr1 & arr2 are not same");
// compare arr1 and arr3
if(arr1 == arr3)
System.out.println("arr1 & arr3 are same");
else
System.out.println("arr1 & arr3 are not same");
// compare arr1 and arr4
if(arr1 == arr4)
System.out.println("arr1 & arr4 are same");
else
System.out.println("arr1 & arr4 are not same");
}
}
Output:-
arr1 &arr2 er ens
arr1 &arr3 er ikke ens
arr1 &arr4 er ikke ens
Begrænsning med ==operator :- For referencedatatyper refererer ==operatoren kun til sammenligning, ikke værdien eller indholdet. For at løse dette problem kom equals() metoden ind i billedet. Vi havde diskuteret disse punkter i detaljer i deres respektive indlæg:- equals()-metoden i Java og ==vs equals() i Java.
Equals()-metoden i Object-klassen sammenligner også to objekter baseret på deres reference. Hvis vi vil sammenligne to objekter baseret på deres værdier, skal vi tilsidesætte equals()-metoden.
Heldigvis har Java en foruddefineret Arrays-klasse i java.util-pakken og indeholder flere metoder til at løse almindelige problemer relateret til arrays. Den indeholder flere equals() metoder til at sammenligne forskellige typer værdier. Disse er,
- offentlig statisk boolesk lig med(byte
[]
a, byte[]
a2) - offentlig statisk boolesk lig (int
[]
a, int[]
a2) - offentlig statisk boolesk lig (kort
[]
a, kort[]
a2) - offentlig statisk boolesk lig (lang
[]
a, lang[]
a2) - offentlig statisk boolesk lig (char
[]
a, char[]
a2) - offentlig statisk boolesk lig (dobbelt
[]
a, dobbelt[]
a2) - offentlig statisk boolean lig med(float
[]
a, float[]
a2) - offentlig statisk boolesk lig (boolesk
[]
a, boolesk[]
a2) - offentlig statisk boolesk lig (Objekt
[]
a, Objekt[]
a2) - offentlig statisk boolesk lig med(T
[]
a, T[]
a2, komparator cmp)
Ud over equals()-metoden indeholder den også deepEquals()-metoden, prototype:- public static boolean deepEquals(Object[]
a1, Objekt[]
a2)
Sammenlign to arrays i Java ved hjælp af Arrays.equals()
Metoden equals() i klassen Arrays sammenligner arrays baseret på deres indhold eller værdier. Arrays.equal()-metoden returner sand, hvis de to specificerede arrays er ens med hinanden. Vi har allerede angivet equals()-metoden givet i Arrays-klassen. Lad os nu se Java-programmet til at sammenligne to arrays ved hjælp af Arrays.equals()-metoden.
import java.util.Arrays;
public class CompareArray {
// main method
public static void main(String[] args) {
// declare and initialize arrays
int arr1[] = {10,20,30,40,50};
int arr2[] = arr1;
int arr3[] = {10,20,30,40,50};
int arr4[] = {15,25,35,45,55};
// compare arrays using Arrays.equals() method
// compare arr1 and arr2
if(Arrays.equals(arr1, arr2))
System.out.println("arr1 & arr2 are same");
else
System.out.println("arr1 & arr2 are not same");
// compare arr1 and arr3
if(Arrays.equals(arr1, arr3))
System.out.println("arr1 & arr3 are same");
else
System.out.println("arr1 & arr3 are not same");
// compare arr1 and arr4
if(Arrays.equals(arr1, arr4))
System.out.println("arr1 & arr4 are same");
else
System.out.println("arr1 & arr4 are not same");
}
}
Output:-
arr1 &arr2 er ens
arr1 &arr3 er ens
arr1 &arr4 er ikke ens
Begrænsning af Arrays.equals()-metoden :- Den kan kun sammenligne endimensionelle arrays. Det kan ikke sammenligne multidimensionelle arrays. Lad os demonstrere det gennem et program.
// limitation of Arrays.equals()
import java.util.Arrays;
public class CompareArray {
// main method
public static void main(String[] args) {
// declare and initialize 2D arrays
int arr1[][] = {{50,60},{70,80},{90,100}};
int arr2[][] = arr1;
int arr3[][] = {{50,60},{70,80},{90,100}};
int arr4[][] = {{55,66},{77,88},{99,100}};
// compare arrays using Arrays.equals() method
// compare arr1 and arr2
if(Arrays.equals(arr1, arr2))
System.out.println("arr1 & arr2 are same");
else
System.out.println("arr1 & arr2 are not same");
// compare arr1 and arr3
if(Arrays.equals(arr1, arr3))
System.out.println("arr1 & arr3 are same");
else
System.out.println("arr1 & arr3 are not same");
// compare arr1 and arr4
if(Arrays.equals(arr1, arr4))
System.out.println("arr1 & arr4 are same");
else
System.out.println("arr1 & arr4 are not same");
}
}
Output:-
arr1 &arr2 er ens
arr1 &arr3 er ikke ens
arr1 &arr4 er ikke ens
I dette program indeholder arr1 og arr3 de samme array-elementer, men da Arrays.equals()-metoden ikke er i stand til at sammenligne multidimensionelle arrays, fik vi de forkerte resultater. For at løse dette problem skal vi bruge Arrays.deepEquals()-metoden .
Sammenlign to arrays i Java ved hjælp af Arrays.deepEquals()
Det returnerer sandt, hvis de to specificerede arrays er dybt ens med hinanden. Denne metode er egnet til brug med indlejrede arrays med vilkårlig dybde.
To array-referencer betragtes som dybt lige store,
- Hvis begge er nul, eller
- Hvis de henviser til arrays, der indeholder det samme antal elementer, og alle tilsvarende par af elementer i de to arrays er dybt ens.
Metodeerklæringen for deepEquals() er:- offentlig statisk boolean deepEquals(Object[]
a1, Objekt[]
a2)
Lad os nu se Java-programmet til at sammenligne 2 todimensionelle (2D) arrays ved hjælp af Arrays.deepEquals()-metoden.
import java.util.Arrays;
public class CompareArray {
// main method
public static void main(String[] args) {
// declare and initialize 2D arrays
int arr1[][] = {{50,60},{70,80},{90,100}};
int arr2[][] = arr1;
int arr3[][] = {{50,60},{70,80},{90,100}};
int arr4[][] = {{55,66},{77,88},{99,100}};
// compare arrays using Arrays.equals() method
// compare arr1 and arr2
if(Arrays.deepEquals(arr1, arr2))
System.out.println("arr1 & arr2 are same");
else
System.out.println("arr1 & arr2 are not same");
// compare arr1 and arr3
if(Arrays.deepEquals(arr1, arr3))
System.out.println("arr1 & arr3 are same");
else
System.out.println("arr1 & arr3 are not same");
// compare arr1 and arr4
if(Arrays.deepEquals(arr1, arr4))
System.out.println("arr1 & arr4 are same");
else
System.out.println("arr1 & arr4 are not same");
}
}
Output:-
arr1 &arr2 er ens
arr1 &arr3 er ens
arr1 &arr4 er ikke ens
Bemærk:- Metoden Arrays.deepEquals() kan kun sammenligne multidimensional matrix, ikke den enkeltdimensionelle matrix.
Metoden Arrays.deepEquals() er i stand til at sammenligne alle multidimensionelle arrays. Her er et eksempel på sammenligning af tredimensionelt (3D) array,
import java.util.Arrays;
public class CompareArray {
// main method
public static void main(String[] args) {
// declare and initialize 3D arrays
int arr1[][][] = { {{1,2},{3,4},{5,6}}, {{7,8},{9,1},{2,3}} };
int arr2[][][] = arr1;
int arr3[][][] = { {{1,2},{3,4},{5,6}}, {{7,8},{9,1},{2,3}} };
int arr4[][][] = { {{1,1},{3,3},{5,5}}, {{7,7},{9,9},{2,2}} };
// compare arrays using Arrays.equals() method
// compare arr1 and arr2
if(Arrays.deepEquals(arr1, arr2))
System.out.println("arr1 & arr2 are same");
else
System.out.println("arr1 & arr2 are not same");
// compare arr1 and arr3
if(Arrays.deepEquals(arr1, arr3))
System.out.println("arr1 & arr3 are same");
else
System.out.println("arr1 & arr3 are not same");
// compare arr1 and arr4
if(Arrays.deepEquals(arr1, arr4))
System.out.println("arr1 & arr4 are same");
else
System.out.println("arr1 & arr4 are not same");
}
}
Output:-
arr1 &arr2 er ens
arr1 &arr3 er ens
arr1 &arr4 er ikke ens
Konklusion
1) Hvis du vil sammenligne et-dimensionelt array, så brug Arrays.equals()-metoden.
2) Hvis du vil sammenligne multi-dimensional array (2D, 3D, 4D og e.t.c), så brug Arrays.deepEquals () metode.