CodeGym /בלוג Java /Random-HE /כיצד להוסיף אלמנט חדש למערך ב-Java
John Squirrels
רָמָה
San Francisco

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

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

מהו מערך ב-Java

בואו ניזכר מהו מערך וכיצד ליצור אותו ב-Java. אם אתה זוכר את זה, אל תהסס לדלג קדימה לכותרת המשנה הבאה "5 דרכים להוסיף אלמנטים חדשים למערכים של Java". תיעוד Java הרשמי של אורקל אומר שמערכים הם סדרה של ערכים השייכים לאותו סוג נתונים. קבוצה של מספרים שלמים היא דוגמה מושלמת למערך ב-Java . לכל הערכים שאתה מגדיר יש מיקום ספציפי בתוך המערך הנקרא אינדקס . להלן הדרכים להכריז ולאתחל מערכים:
int[] myArray = new int[10];
int[] myArray1 = {1, 0, 3, 17, 5, 6, 7, 8, 9, 10}
במקרה הראשון, הגדרנו מערך myArray וגרמנו ל-Java להקצות מקום למערך של 10 אלמנטים, ב- myArray1 השני , הכנסנו אליו מיד 10 ערכים. בכל מקרה, לא ניתן פשוט לדחוף את רכיב 11 לתוך המערך. כדי לבצע פעולות עם מערכים, מפתחים מבצעים מניפולציות על המדדים של ערכים שמכיל מערך. מה אנחנו צריכים לעשות? בואו נסתכל על הדרכים הנפוצות ביותר להוסיף למערך.

5 דרכים להוסיף אלמנטים חדשים למערכים של Java

ובכן, הנה הטריקים שלנו כדי לגרום לבלתי משתנה להיראות בר שינוי.
  • המרת מערך לרשימה
  • צור מערך חדש עם קיבולת גדולה יותר והוסף אלמנט חדש למערך
  • יישום System.arraycopy()
  • העתקת מערכים באמצעות Apache Commons
  • החלת השיטה ArrayCopyOf()
בואו נסתכל מקרוב על הדרכים הללו להוספת אלמנט למערך.

1. המרת מערך לרשימה

מכיוון שאיננו יכולים להוסיף אלמנט חדש למערך ישירות, הדבר הבא הטוב ביותר לעשות הוא להמיר אותם לרשימות, להוסיף אלמנטים חדשים ולהמיר מחדש את הערכים למערכים. הדרך הראשונה להמיר מערך לרשימה היא להשתמש ב-asList() כדי ליצור ArrayList חדש. לאחר שטווח הערכים עבר טרנספורמציה בהצלחה, השתמש ב- ListAdd() כדי להכניס את הערך. ברגע שאינך צריך עוד לערוך מערך, המר בחזרה לסוג הנתונים המקורי בעזרת שיטת toArray() . עם כל השיטות וההמרות, זה יכול להיראות מבלבל בהתחלה. בואו נסתכל על הדוגמה של השימוש ב-asList() כדי לנקות דברים.
// Code for adding Java arrays to a program
import java.lang.*;
import java.util.*;

class ArrayDemo{
   //Let’s add a new element to an array
   public static Integer[] addX(Integer myArray[], int x) {
       int i;
       //turn array into ArrayList using asList() method
       List arrList = new ArrayList( Arrays.asList(myArray));

       // adding a new element to the array
       arrList.add(x);

       // Transforming the ArrayList into an array
       myArray = arrList.toArray(myArray);
       return myArray;
   }
   public static void main(String[] args) {
       int i;
       //initial array
       Integer myArray[] = { 0, 1, 2, 45, 7, 5, 17};

       //print the initial array out
       System.out.println("Initial Array: "
                          + Arrays.toString(myArray));

       //element to be added
       int x = 28;

       // call the method to add x in myArray
       myArray = addX(myArray, x);

       // print the updated array out
       System.out.println("Array with " + x + " added: "
                          + Arrays.toString(myArray));
   }
}
הפלט הוא:
מערך התחלתי: [0, 1, 2, 45, 7, 5, 17] מערך בתוספת 28: [0, 1, 2, 45, 7, 5, 17, 28]
לכן, בתוכנית יצרנו בהצלחה מערך myArray של 7 ערכים, מילאנו אותו והדפסנו אותו. ואז החלטנו שעשרה ערכים לא מספיקים לנו. ובכן, המרנו את myArray ל-ArrayList arrList בשיטת Arrays.asList . הנה 28, האלמנט שיש להוסיף. הוספנו אותו ל- ArrayList arrList , ולאחר מכן המרנו אותו בחזרה למערך בשיטת toArray() והדפסנו את המערך החדש.

2. צור מערך חדש עם קיבולת גדולה יותר

אחת הדרכים הנפוצות ביותר להוסיף אלמנטים נוספים למערך היא על ידי יצירת מערך חדש, גדול יותר, מאפס, הצבת האלמנטים של הישנים והוספת אלמנטים חדשים. להלן הדרכה שלב אחר שלב של התהליך:
  • צור מערך חדש עם הקיבולת a+n (a - קיבולת המערך המקורית, n - מספר האלמנטים שברצונך להוסיף).
  • הוסף את כל הרכיבים של טווח הנתונים הקודם לחדש, כמו גם את הערכים החדשים.
  • הדפס את המערך שהתקבל.
נסה ליצור מערך כזה בעצמך והשווה את הקוד שלך לזה שבדוגמה למטה:
// Java Program to add an element in an Array

import java.lang.*;
import java.util.*;

class ArrayDemo {
   //Method to add an element x into array myArray
   public static int[] addX(int myArray[], int x) {
       int i;

       // create a new array of a bigger size (+ one element)
       int newArray[] = new int[myArray.length + 1];

       // insert the elements from the old array into the new one
       for (i = 0; i < myArray.length; i++)
           newArray[i] = myArray[i];

       newArray[myArray.length] = x;
       return newArray;
   }

   public static void main(String[] args) {
       int i;

       // initial array of size 10
       int arr[]
               = {0, 1, 2, 45, 7, 5, 17};

       // print the initial array
       System.out.println("Initial Array: " + Arrays.toString(arr));

       // element to be added
       int x = 28;

       // call the addX method to add x in arr
       arr = addX(arr, x);
       // print the updated array
       System.out.println("Array with " + x + " added:" + Arrays.toString(arr));
   }
}
הפלט הוא:
מערך ראשוני: [0, 1, 2, 45, 7, 5, 17] מערך עם 28 שנוספו:[0, 1, 2, 45, 7, 5, 17, 28]
ובכן, הדרך הזו להוסיף אלמנט חדש למערך היא הקלה ביותר.

3. החלת System.arrayCopy()

System.arrayCopy() היא שיטה בשימוש נרחב להקצאת מערך גדול יותר ביעד של מערך מקור. מפתח יכול לציין את הרצף שהוא רוצה להעתיק למערך חדש בסוגריים של השיטה. כדי לראות כיצד השיטה פועלת ולנסות להשתמש בה בעצמך, עיין בדוגמה הבאה ונסה להפעיל אותה:
import java.util.Arrays;

class ArrayDemo {
   private static Integer[] addElement(Integer[] myArray, int newElement) {
       //we create a new Object here, an array of bigger capacity
       Integer[] array = new Integer[myArray.length + 1];
       System.arraycopy(myArray, 0, array, 0, myArray.length);
       array[myArray.length] = newElement;
       return array;
   }

   public static void main(String[] args) {
       Integer[] myArray = {20, 21, 3, 4, 5, 88};
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
       myArray = addElement(myArray, 12);
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
   }
}
הפלט הוא:
myArray לפני הוספת אלמנט חדש: [20, 21, 3, 4, 5, 88] myArray לפני הוספת אלמנט חדש: [20, 21, 3, 4, 5, 88, 12]
כאן יצרנו מערך myArray , הדפסנו אותו והוספנו אלמנט חדש בשיטת addElement שלנו , הבנויה על System.arrayCopy() .

4. שימוש ב-Apache Commons להעתקת מערכים

בואו נשתמש בדרך לא סטנדרטית. כלומר, ספריית צד שלישי Apache Commons lang. זהו חלק מפרויקט Apache Commons המתמקד בכל ההיבטים של רכיבי Java הניתנים לשימוש חוזר. ידע על הפרויקט לא יהיה מיותר. ל-Apache Commons lang יש שיטה add() שתוכננה במיוחד כדי לאפשר הרחבת מערכים, זה חוסך לקודנים הרבה זמן ומאמץ. כדאי לזכור ששיטת ה-add() של Apache Commons זו מבוססת על קריאה לשיטת System.arraycopy() למקרה שתצטרך לענות על מבחן או שאלת ראיון מסובכת. כדי להוסיף את הספריות לפרויקט שלך עבור אל אתר Apache Commons והורד את הספריות. לאחר מכן עבור אל הקובץ ← מבנה הפרויקט ← ספריות > + ובחר את קבצי ה-jar שהורדת.
import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;

class ArrayDemo {
   private static <T> T[] append(T[] arr, T element) {
       return ArrayUtils.add(arr, element);
   }

   public static void main(String[] args) {
       Integer[] myArray = { 0, 1, 2, 3, 4};
       System.out.println("myArray: " + Arrays.toString(myArray));

       myArray = append(myArray, 5);
       System.out.println("new Array with the number added: " + Arrays.toString(myArray));
   }
}
הפלט הוא:
myArray: [0, 1, 2, 3, 4] מערך חדש בתוספת המספר: [0, 1, 2, 3, 4, 5]

5. יישום ArrayCopyOf()

ArrayCopyOf() היא שיטה אחת נוספת להוספת אלמנט חדש למערך. כמו Apache Commons lang add() הוא קורא באופן פנימי System.arraycopy() לביצוע הפעולה הזו. עם זאת, רוב המפתחים מעדיפים את ArrayCopyOf() מכיוון שהוא מאפשר להם לשמור על הקוד תמציתי וקריא. הנה דוגמה לשימוש ב-ArrayCopyOf() כדי להוסיף אלמנטים חדשים למערך:
import java.util.Arrays;
class ArrayDemo {
   private static <X> X[] addElement(X[] myArray, X element) {
       X[] array = Arrays.copyOf(myArray, myArray.length + 1);
       array[myArray.length] = element;
       return array;
   }
   public static void main(String[] args) {
       Integer[] myArray = {20, 21, 3, 4, 5, 88};
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
       myArray = addElement(myArray, 12);
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
   }
}
הפלט הוא:
myArray לפני הוספת אלמנט חדש: [20, 21, 3, 4, 5, 88] myArray לפני הוספת אלמנט חדש: [20, 21, 3, 4, 5, 88, 12]

סיכום

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

קריאה נוספת:

הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION