logo

Как да сравним два масива в Java?

В Java можем сравнете два масива чрез сравняване на всеки елемент от масива. Java Масиви предоставя два предварително дефинирани метода, които се използват за сравнете два масива в Java .

В този раздел ще научим как да сравните два масива използвайки Arrays.equals() метод и Arrays.deepEquals() метод. Заедно с това ние също ще научим как да извършите дълбоко сравнение между двата масива с подходящи примери.

Два масива са равни, ако:

  • Те са еднотипни.
  • Те имат равен брой елементи.
  • Съответстващите двойки елементи в двата масива трябва да са еднакви.
  • Редът на елементите трябва да бъде еднакъв.
  • Две препратки към масив са равни, ако са нулеви.

Преди да преминете към темата, първо разгледайте следния пример и познайте резултата.

ArrayEqualsExample1.java

пролетен облак
 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.'); } } 

Изход:

 Arrays are not equal. 

В горния пример a1 и a2 са двете препратки на два различни обекта. Когато сравняваме две референтни променливи, получаваме резултата Масивите не са равни, докато двата масива са с еднаква дължина и имат еднакви елементи. Не получаваме желания резултат, защото операторът за равенство (==) ги сравнява като обект.

Сега имаме само опция да сравним два масива, т.е. сравнете съдържанието (елементите) на масива . Нека да видим как да сравним съдържанието на масива.

Ще бъде добре, ако сравним елементите един по един. За да сравните съдържанието на масива Java Масиви клас предоставя следните два метода за сравняване на два масива:

низ към char
  • метод equals().
  • Метод deepEquals().

Метод Arrays.equals().

Java Масиви клас осигурява равно на() метод за сравняване на два масива. Той итерира всяка стойност на масив и сравнява елементите с помощта на метода equals().

Синтаксис:

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

Той анализира два масива a1 и a2, които трябва да бъдат сравнени. Методът връща true, ако масивите са равни, в противен случай връща false. The Клас масиви има списък с претоварен метод equals() за различни примитивни типове и един за тип обект.

видове двоично дърво

Забележка: Докато използвате масива от обекти, не забравяйте да замените метода equals(). В противен случай ще получим изхода, върнат от метода equals() на класа 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.'); } } 

Изход:

 Arrays are equal. 

Да видим друг пример.

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

Изход:

prime без код в java
 Are array1 and array2 equal? false Are array1 and array3 equal? true 

Виждаме, че Arrays.equals() метод сравнява елементите на масива. Тук възниква въпросът какво ще стане, ако един масив има вложен масив или някакви други препратки, които се отнасят до различен обект, но имат същите стойности.

Нека го разберем чрез следния пример.

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

Изход:

.е равно на java
 Arrays are not equal. 

В горния пример виждаме, че методът equals() не е в състояние да извърши дълбоко сравнение. За да разреши този проблем, класът Java Arrays предоставя друг метод deepEquals(), който дълбоко сравнява двата масива.

Метод Arrays.deepEquals().

Java Масиви клас предоставя друг метод deepEquals() за дълбоко сравняване на масива. Тук дълбоко сравнение означава, че може да сравнява два вложени масива с произволна дълбочина. Две референтни обекти на масиви e1 и e2 са дълбоко равни, ако отговарят на някое от следните условия:

  • e1=e2
  • equals(e2) връща true.
  • Ако e1 и e2 са един и същ примитивен тип, претоварването на метода Arrays.equals(e1, e2) връща true.
  • Ако и двата e1 и e2 са масиви от референтни типове обекти, методът Arrays.deepEquals(e1, e2) връща true.

Синтаксис:

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

Методът анализира двата масива a1 и a2, които трябва да се сравнят. Връща true, ако и двата масива са дълбоко равни, в противен случай връща false.

Нека създадем програма и дълбоко сравним два масива, използвайки deepEquals() метод на класа 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.'); } } 

Изход:

 Arrays are equal.