logo

כיצד להשוות שני מערכים ב-Java?

בג'אווה, אנחנו יכולים השוו בין שני מערכים על ידי השוואת כל רכיב במערך. Java מערכים class מספקת שתי שיטות מוגדרות מראש שרגילות השוו שני מערכים ב-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 מערכים class מספקת את שתי השיטות הבאות להשוואה בין שני מערכים:

מחרוזת ל-char
  • שיטת equals()
  • שיטת deepEquals()

שיטת Arrays.equals()

Java מערכים הכיתה מספקת את שווים() שיטה להשוואה בין שני מערכים. הוא חוזר על כל ערך של מערך ומשווה את האלמנטים באמצעות השיטה equals() .

תחביר:

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

הוא מנתח שני מערכים a1 ו-a2 שיש להשוות. השיטה מחזירה true אם מערכים שווים, אחרת מחזירה false. ה כיתת מערכים יש רשימה של שיטת equals() עמוסה מדי עבור סוגים פרימיטיביים שונים ואחת עבור סוג Object.

הערה: בזמן השימוש במערך האובייקטים, אל תשכח לעקוף את שיטת 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)); } } 

תְפוּקָה:

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

אנו רואים כי ה Arrays.equals() השיטה משווה את האלמנטים של המערך. כאן, מתעוררת שאלה: מה אם למערך יש מערך מקונן או הפניות אחרות שמתייחסות לאובייקט שונה אך בעלי אותם ערכים.

בואו נבין את זה דרך הדוגמה הבאה.

כיצד להפנות מצביע ב-c

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

תְפוּקָה:

 Arrays are not equal. 

בדוגמה שלמעלה, אנו רואים שהשיטה equals() אינה מסוגלת לבצע השוואה עמוקה. כדי לפתור בעיה זו, המחלקה Java Arrays מספקת שיטה נוספת deepEquals() המשווה לעומק את שני המערכים.

שיטת Arrays.deepEquals()

Java מערכים class מספקת שיטה נוספת deepEquals() כדי להשוות לעומק את המערך. כאן, השוואה עמוקה פירושה שהוא יכול להשוות שני מערכים מקוננים של עומק שרירותי. שני מערכים הפניה לאובייקט e1 ו-e2 שווים במידה רבה אם הם מחזיקים באחד מהתנאים הבאים:

עיצוב דפוסי java
  • e1=e2
  • equals(e2) מחזירה true.
  • אם e1 ו-e2 שניהם אותו סוג פרימיטיבי, עומס יתר של השיטה Arrays.equals(e1, e2) מחזיר אמת.
  • אם e1 ו-e2 הם שניהם מערכים של סוגי התייחסות לאובייקט, השיטה Arrays.deepEquals(e1, e2) מחזירה true.

תחביר:

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

השיטה מנתחת את שני המערכים a1 ו-a2 שיש להשוות. זה מחזיר אמת אם שני המערכים שווים מאוד, אחרת מחזירה 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.