أوه، صفائف جافا. إنهم موضع حب وكراهية شديدين لمئات من مطوري البرامج المبتدئين. قالوا إن إضافة عناصر إلى مصفوفة تمت تهيئتها بالفعل أمر مستحيل... في الواقع، هذا ممكن، ولكن ليس بالمعنى الكلاسيكي... وهو ليس مريحًا للغاية. تعد إضافة عناصر جديدة إلى مصفوفة تمت تهيئتها بالفعل نوعًا من الخدعة. ومع ذلك، يمكن أن تكون هذه الحيل مفيدة في مقابلة العمل... وأحيانًا في وظيفة المبرمج. للتأكد من أنك تستمتع باستخدام نوع البيانات ومعرفة كيفية القيام بذلك بكفاءة، قمنا بكتابة دليل حول إضافة عنصر جديد إلى مصفوفة Java. بخلاف مراجعة النظرية وعينات التعليمات البرمجية بعناية، تأكد من مراجعة وإكمال المشكلات التدريبية الواردة في المنشور.
ما هو المصفوفة في جافا
دعونا نتذكر ما هو المصفوفة وكيفية إنشائها في جافا. إذا كنت تتذكر ذلك، فلا تتردد في الانتقال إلى العنوان الفرعي التالي "5 طرق لإضافة عناصر جديدة إلى مصفوفات Java". تقول وثائق Java الرسمية لشركة Oracle أن المصفوفات عبارة عن سلسلة من القيم التي تنتمي إلى نفس نوع البيانات. تعد مجموعة الأعداد الصحيحة مثالًا رائعًا لمصفوفة في 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 طرق لإضافة عناصر جديدة إلى مصفوفات جافا
حسنًا، إليك حيلنا لجعل ما هو غير قابل للتغيير يبدو قابلاً للتغيير.- تحويل صفيف إلى قائمة
- قم بإنشاء مصفوفة جديدة بسعة أكبر وأضف عنصرًا جديدًا إلى المصفوفة
- تنفيذ 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 على طريقة add() مصممة خصيصًا للسماح بتوسيع المصفوفات، فهي توفر على المبرمجين الكثير من الوقت والجهد. من الجدير بالذكر أن طريقة Apache Commons add() تعتمد على استدعاء طريقة System.arraycopy() في حالة اضطرارك للإجابة على اختبار صعب أو سؤال في المقابلة. لإضافة المكتبات إلى مشروعك، انتقل إلى موقع Apache Commons وقم بتنزيل المكتبات. ثم انتقل إلى الملف → هيكل المشروع → المكتبات > + وحدد ملفات الجرة التي تم تنزيلها.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، فلا تتردد في اختيار الطريقة التي تناسبك.
المزيد من القراءة: |
---|
GO TO FULL VERSION