הוספת אלמנט למערך Java לעומת ArrayList

1. סקירה כללית

במדריך זה נבחן בקצרה את הדמיון והשונה בהקצאת הזיכרון בין מערכי Java לתקן רשימת מערך. יתר על כן, נראה כיצד להוסיף ולהכניס אלמנטים למערך ו- רשימת מערך.

2. מערכי Java ו- ArrayList

מערך ג'אווה הוא מבנה נתונים בסיסי המסופק על ידי השפה. בניגוד, רשימת מערך הוא יישום של רשימה ממשק המגובה על ידי מערך ומסופק במסגרת Java Collections Framework.

2.1. גישה ושינוי אלמנטים

אנו יכולים לגשת ולשנות אלמנטים של מערך באמצעות הסימון בסוגריים מרובעים:

System.out.println (anArray [1]); anArray [1] = 4;

מצד שני, רשימת מערך יש קבוצה של שיטות לגישה ושינוי אלמנטים:

int n = anArrayList.get (1); anArrayList.set (1, 4);

2.2. גודל קבוע לעומת דינמי

מערך וה רשימת מערך שניהם מקצים זיכרון ערימה באופן דומה, אך מה ששונה זה מערך הוא בגודל קבוע, ואילו בגודל של רשימת מערך עולה באופן דינמי.

מכיוון שמערך ג'אווה הוא בגודל קבוע, עלינו לספק את הגודל תוך הפעלת אותו. לא ניתן להגדיל את גודל המערך לאחר שהוא מיידי. במקום זאת, עלינו ליצור מערך חדש עם הגודל המותאם ולהעתיק את כל האלמנטים מהמערך הקודם.

רשימת מערך הוא יישום מערך הניתן לשינוי גודל של רשימה ממשק - כלומר רשימת מערך גדל באופן דינמי ככל שמתווספים אליו אלמנטים. כאשר מספר האלמנטים הנוכחיים (כולל האלמנט החדש שיש להוסיף ל- רשימת מערך) גדול מהגודל המקסימלי של המערך הבסיסי שלו, ואז ה- רשימת מערך מגדיל את גודל המערך הבסיסי.

אסטרטגיית הצמיחה עבור המערך הבסיסי תלויה ביישום ה- רשימת מערך. עם זאת, מכיוון שלא ניתן להגדיל באופן דינמי את גודל המערך הבסיסי, נוצר מערך חדש ואלמנטי המערך הישנים מועתקים למערך החדש.

לפעולת ההוספה עלות זמן מופחתת קבועה. במילים אחרות, הוספה נ אלמנטים ל- רשימת מערך דורש עַל) זְמַן.

2.3. סוגי אלמנטים

מערך יכול להכיל סוגי נתונים פרימיטיביים כמו גם לא פרימיטיביים, בהתאם להגדרת המערך. למרות זאת, an רשימת מערך יכול להכיל רק סוגי נתונים שאינם פרימיטיביים.

כאשר אנו מכניסים אלמנטים עם סוגי נתונים פרימיטיביים ל- רשימת מערך, מהדר Java ממיר אוטומטית את סוג הנתונים הפרימיטיבי למחלקת עטיפת האובייקטים המתאימה לו.

בואו נסתכל כעת כיצד להוסיף ולהכניס אלמנטים במערכי Java ו- רשימת מערך.

3. הוספת אלמנט

כפי שכבר ראינו, מערכים הם בגודל קבוע.

לכן, כדי להוסיף אלמנט, ראשית, עלינו להכריז על מערך חדש שגדול מהמערך הישן ולהעתיק את האלמנטים מהמערך הישן למערך החדש שנוצר. לאחר מכן, אנו יכולים להוסיף את האלמנט החדש למערך החדש שנוצר.

בואו נסתכל על יישומה ב- Java מבלי להשתמש בכיתות עזר:

מספר שלם ציבורי [] addElementUsingPureJava (מספר שלם [] srcArray, int elementToAdd) {Integer [] destArray = מספר שלם חדש [srcArray.length + 1]; עבור (int i = 0; i <srcArray.length; i ++) {destArray [i] = srcArray [i]; } destArray [destArray.length - 1] = elementToAdd; להחזיר destArray; }

לחלופין, ה מערכים class מספק שיטת כלי עזר העתק של(), המסייע ביצירת מערך חדש בגודל גדול יותר ובהעתקת כל האלמנטים מהמערך הישן:

int [] destArray = Arrays.copyOf (srcArray, srcArray.length + 1);

לאחר שיצרנו מערך חדש, נוכל להוסיף בקלות את האלמנט החדש למערך:

destArray [destArray.length - 1] = elementToAdd;

מצד שני, מוסיף אלמנט ב רשימת מערך די קל:

anArrayList.add (newElement);

4. הכנסת אלמנט באינדקס

הכנסת אלמנט לאינדקס נתון מבלי לאבד את האלמנטים שנוספו בעבר אינה משימה פשוטה במערכים.

ראשית כל, אם המערך כבר מכיל את מספר האלמנטים השווים לגודלו, אז ראשית עלינו ליצור מערך חדש בגודל גדול יותר ולהעתיק את האלמנטים למערך החדש.

יתר על כן, עלינו להזיז את כל האלמנטים הבאים אחרי האינדקס שצוין במיקום אחד ימינה:

int static public [] insertAnElementAtAGivenIndex (int int [] srcArray, int index, int newElement) {int [] destArray = int int [srcArray.length + 1]; int j = 0; עבור (int i = 0; i <destArray.length-1; i ++) {if (i == index) {destArray [i] = newElement; } אחר {destArray [i] = srcArray [j]; j ++; }} להחזיר destArray; }

אולם, ה ArrayUtils class נותן לנו פתרון פשוט יותר להכנסת פריטים למערך:

int [] destArray = ArrayUtils.insert (2, srcArray, 77);

עלינו לציין את האינדקס שבו אנו רוצים להכניס את הערך, את מערך המקור ואת הערך להכניס.

ה לְהַכנִיס() השיטה מחזירה מערך חדש המכיל מספר גדול יותר של אלמנטים, כאשר האלמנט החדש באינדקס שצוין וכל האלמנטים הנותרים הוסטו מיקום אחד ימינה.

שים לב שהטיעון האחרון של לְהַכנִיס() השיטה היא ארגומנט משתנה, כך שנוכל להוסיף מספר כלשהו של פריטים למערך.

בואו נשתמש בו כדי להוסיף שלושה אלמנטים פנימה srcArray החל ממדד שני:

int [] destArray = ArrayUtils.insert (2, srcArray, 77, 88, 99);

והאלמנטים הנותרים יועברו שלושה מקומות ימינה.

יתר על כן, ניתן להשיג זאת באופן טריוויאלי עבור רשימת מערך:

anArrayList.add (אינדקס, newElement);

רשימת מערך מעביר את האלמנטים ומכניס את האלמנט במקום הנדרש.

5. מסקנה

במאמר זה, הסתכלנו על מערך Java ו- רשימת מערך. יתר על כן, בדקנו את הדמיון והשוני בין השניים. לבסוף, ראינו כיצד להוסיף ולהכניס אלמנטים למערך ו- רשימת מערך.

כמו תמיד, קוד המקור המלא של דוגמאות העבודה זמין באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found