المصفوفة ذات حجم ثابت ومتجانس بنية البيانات . الحد من المصفوفات هو أنها ثابتة الحجم. وهذا يعني أنه يجب علينا تحديد عدد العناصر أثناء الإعلان عن المصفوفة. وهنا يطرح سؤال ماذا لو أردنا إدراج عنصر ولم يتبقى مساحة للعنصر الجديد؟ وهنا مفهوم مجموعة ديناميكية يأتي إلى الوجود. إنه ينفق حجم المصفوفة ديناميكيًا.
في هذا القسم سوف نفهم ما هي المصفوفة الديناميكية، ميزات المصفوفة الديناميكية، كيفية تغيير حجم المصفوفة الديناميكية، و كيفية تنفيذ مجموعة ديناميكية في جافا .
ما هي المصفوفة الديناميكية؟
المصفوفة الديناميكية هي أ حجم متغير بنية بيانات القائمة. ينمو تلقائيًا عندما نحاول إدراج عنصر إذا لم يكن هناك مساحة متبقية للعنصر الجديد. يسمح لنا بإضافة وإزالة العناصر. يقوم بتخصيص الذاكرة في وقت التشغيل باستخدام الكومة. يمكنه تغيير حجمه أثناء وقت التشغيل.
في جافا , ArrayList هو تنفيذ يمكن تغيير حجمه. يقوم بتنفيذ واجهة القائمة ويوفر جميع الطرق المتعلقة بعمليات القائمة. قوة المصفوفة الديناميكية هي:
- بحث سريع
- حجم متغير
- صديقة لذاكرة التخزين المؤقت
عمل المصفوفة الديناميكية
في المصفوفة الديناميكية، يتم تخزين العناصر بشكل متجاور من بداية المصفوفة وتظل المساحة المتبقية غير مستخدمة. يمكننا إضافة العناصر حتى يتم استهلاك المسافات المحجوزة بالكامل. عندما يتم استهلاك المساحة المحجوزة والمطلوب إضافة بعض العناصر. في مثل هذه الحالة، يجب زيادة حجم المصفوفة ذات الحجم الثابت. لاحظ أنه قبل إلحاق العنصر، نقوم بتخصيص مصفوفة أكبر، ونسخ العناصر من المصفوفة، وإرجاع المصفوفة التي تم إنشاؤها حديثًا.
هناك طريقة أخرى لإضافة عنصر وهي أن تقوم أولاً بإنشاء دالة تقوم بإنشاء مصفوفة جديدة ذات حجم مزدوج، ونسخ جميع العناصر من المصفوفة القديمة، وإرجاع المصفوفة الجديدة. وبالمثل، يمكننا أيضًا تقليص حجم المصفوفة الديناميكية.
الحجم مقابل السعة
تؤدي تهيئة المصفوفة الديناميكية إلى إنشاء مصفوفة ذات حجم ثابت. في الشكل التالي، يحتوي تنفيذ المصفوفة على 10 مؤشرات. لقد أضفنا خمسة عناصر إلى المصفوفة. الآن، يبلغ طول المصفوفة الأساسية خمسة. لذلك، يبلغ طول حجم المصفوفة الديناميكية 5 وسعتها 10. وتتتبع المصفوفة الديناميكية نقطة النهاية.
مميزات المصفوفة الديناميكية
في Java، يحتوي المصفوفة الديناميكية على ثلاث ميزات رئيسية: إضافة عنصر، وحذف عنصر، وتغيير حجم المصفوفة.
إضافة عنصر في صفيف ديناميكي
في المصفوفة الديناميكية، يمكننا إنشاء مصفوفة ذات حجم ثابت إذا طلبنا إضافة بعض العناصر الإضافية في المصفوفة. عادةً ما يتم إنشاء مصفوفة جديدة ذات حجم مزدوج. بعد ذلك، يقوم بنسخ كافة العناصر إلى المصفوفة التي تم إنشاؤها حديثًا. نحن نستخدم النهج التالي:
حذف عنصر من صفيف ديناميكي
إذا أردنا إزالة عنصر من المصفوفة في الفهرس المحدد، نستخدم إزالة في (ط) طريقة. تقوم الطريقة بتحليل رقم الفهرس لهذا العنصر الذي نريد حذفه. بعد حذف العنصر، يقوم بنقل العناصر المتبقية (العناصر الموجودة على يمين العنصر المحذوف) إلى اليسار من رقم الفهرس المحدد. نستخدم أيضًا طريقة الإزالة () التي تحذف عنصرًا من نهاية المصفوفة. بعد نقل العناصر، يتم تخزينها 0 في قصر العنصر الأخير. ولنفهم ذلك من خلال المثال، كما وضحنا في الشكل التالي.
تغيير حجم صفيف ديناميكي في Java
نحتاج إلى تغيير حجم المصفوفة في حالتين إذا:
- يستخدم المصفوفة ذاكرة إضافية عما هو مطلوب.
- تشغل المصفوفة كل الذاكرة ونحتاج إلى إضافة عناصر.
في الحالة الأولى نستخدم حجم شرينك () طريقة تغيير حجم مجموعة مصفوفة . فهو يقلل من حجم المصفوفة. يقوم بتحرير الذاكرة الإضافية أو غير المستخدمة. وفي الحالة الثانية نستخدم حجم النمو () طريقة تغيير حجم المصفوفة. فهو يزيد من حجم المصفوفة.
إنها عملية مكلفة لأنها تتطلب مصفوفة أكبر وتقوم بنسخ جميع العناصر من المصفوفة السابقة بعد ذلك تقوم بإرجاع المصفوفة الجديدة.
لنفترض أنه في المصفوفة أعلاه، يلزم إضافة ستة عناصر أخرى، وفي المصفوفة، لم يتبق المزيد من الذاكرة لتخزين العناصر. في مثل هذه الحالات، نقوم بتنمية المصفوفة باستخدام حجم النمو () طريقة.
تهيئة صفيف ديناميكي
تهيئة المصفوفة الديناميكية هي نفس المصفوفة الثابتة. خذ بعين الاعتبار برنامج Java التالي الذي يقوم بتهيئة صفيف ديناميكي.
تهيئةDynamicArray.java
public class InitializeDynamicArray { public static void main(String[] args) { //declaring array int array[]; //initialize an array array= new int[6]; //adding elements to the array array[0] = 34; array[1] = 90; array[2] = 12; array[3] = 22; array[4] = 9; array[5] = 27; System.out.print('Elements of Array are: '); //iteraton over the array for(int i=0; i <array.length ; i++) { system.out.print(array[i] +' '); } < pre> <p> <strong>Output:</strong> </p> <pre> Elements of Array are: 34 90 12 22 9 27 </pre> <p>Let's implement the operations in a Java program that we have discussed above.</p> <p> <strong>DynamicArrayExample1.java</strong> </p> <pre> public class DynamicArrayExample1 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample1() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; creating a function that deletes an element at specified index public void addelementat(int index, int a) compare size with number if not equal grows (count="=" sizeofarray) invoking growsize() method growsize(); for (int i="count" - 1;>= index; i--) { //shifting all the elements to the left from the specified index array[i + 1] = array[i]; } //inserts an element at the specified index array[index] = a; count++; } public static void main(String[] args) { DynamicArrayExample1 da = new DynamicArrayExample1(); //adding elements to the array da.addElement(12); da.addElement(22); da.addElement(35); da.addElement(47); da.addElement(85); da.addElement(26); da.addElement(70); da.addElement(81); da.addElement(96); da.addElement(54); System.out.println('Elements of the array:'); //iterate over the array for accessing the elements for (int i = 0; i <da.sizeofarray; 5 99 i++) { system.out.print(da.array[i] + ' '); } system.out.println(); determines and prints the size number of elements array system.out.println('size array: da.sizeofarray); system.out.println('no. in da.count); invoking method to add an element at specified index da.addelementat(5, 99); where is be system.out.println(' elements after adding 5:'); iterate over for accessing (int i="0;" < da.sizeofarray; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-6.webp" alt="Dynamic Array in Java"> <p>Let's shrink the array, delete the last element, and a specified element from the array.</p> <p> <strong>DynamicArrayExample2.java</strong> </p> <pre> public class DynamicArrayExample2 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample2() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; method removes unused space public void shrinksize() declares a temp[] int if (count> 0) { //creates an array of the size equal to the count i.e. number of elements the array have temp = new int[count]; for (int i = 0; i <count; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="count;" creating a function that removes last for public void removeelement() if (count> 0) { array[count - 1] = 0; count--; } } //creating a function that delets an element from the specified index public void removeElementAt(int index) { if (count > 0) { for (int i = index; i <count 7 - 1; i++) { shifting all the elements to left from specified index array[i]="array[i" + 1]; } array[count 1]="0;" count--; public static void main(string[] args) dynamicarrayexample2 da="new" dynamicarrayexample2(); adding array da.addelement(12); da.addelement(22); da.addelement(35); da.addelement(47); da.addelement(85); da.addelement(26); da.addelement(70); da.addelement(81); da.addelement(96); da.addelement(54); system.out.println('elements of array:'); iterate over for accessing (int i="0;" < da.sizeofarray; system.out.print(da.array[i] ' '); system.out.println(); determines and prints size number system.out.println('size array: da.sizeofarray); system.out.println('no. in da.count); invoking method delete last element da.removeelement(); after deleting system.out.print(' elements element: system.out.print('no. da.count+' '); that deletes an da.removeelementat(7); at 7: pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-7.webp" alt="Dynamic Array in Java"> <hr></count></count;></sizeofarray;></pre></da.sizeofarray;></sizeofarray;></pre></array.length>
دعونا ننفذ العمليات في برنامج Java الذي ناقشناه أعلاه.
DynamicArrayExample1.java
public class DynamicArrayExample1 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample1() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; creating a function that deletes an element at specified index public void addelementat(int index, int a) compare size with number if not equal grows (count="=" sizeofarray) invoking growsize() method growsize(); for (int i="count" - 1;>= index; i--) { //shifting all the elements to the left from the specified index array[i + 1] = array[i]; } //inserts an element at the specified index array[index] = a; count++; } public static void main(String[] args) { DynamicArrayExample1 da = new DynamicArrayExample1(); //adding elements to the array da.addElement(12); da.addElement(22); da.addElement(35); da.addElement(47); da.addElement(85); da.addElement(26); da.addElement(70); da.addElement(81); da.addElement(96); da.addElement(54); System.out.println('Elements of the array:'); //iterate over the array for accessing the elements for (int i = 0; i <da.sizeofarray; 5 99 i++) { system.out.print(da.array[i] + \' \'); } system.out.println(); determines and prints the size number of elements array system.out.println(\'size array: da.sizeofarray); system.out.println(\'no. in da.count); invoking method to add an element at specified index da.addelementat(5, 99); where is be system.out.println(\' elements after adding 5:\'); iterate over for accessing (int i="0;" < da.sizeofarray; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-6.webp" alt="Dynamic Array in Java"> <p>Let's shrink the array, delete the last element, and a specified element from the array.</p> <p> <strong>DynamicArrayExample2.java</strong> </p> <pre> public class DynamicArrayExample2 { private int array[]; private int count; private int sizeofarray; //creating a constructor of the class that initializes the values public DynamicArrayExample2() { array = new int[1]; count = 0; sizeofarray = 1; } //creating a function that appends an element at the end of the array public void addElement(int a) { //compares if the number of elements is equal to the size of the array or not if (count == sizeofarray) { //invoking the growSize() method that creates an array of double size growSize(); } //appens an element at the end of the array array[count] = a; count++; } //function that creates an array of double size public void growSize() { //declares a temp[] array int temp[] = null; if (count == sizeofarray) { //initialize a double size array of array temp = new int[sizeofarray * 2]; { for (int i = 0; i <sizeofarray; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="sizeofarray" * 2; method removes unused space public void shrinksize() declares a temp[] int if (count> 0) { //creates an array of the size equal to the count i.e. number of elements the array have temp = new int[count]; for (int i = 0; i <count; i++) { copies all the elements of old array temp[i]="array[i];" } sizeofarray="count;" creating a function that removes last for public void removeelement() if (count> 0) { array[count - 1] = 0; count--; } } //creating a function that delets an element from the specified index public void removeElementAt(int index) { if (count > 0) { for (int i = index; i <count 7 - 1; i++) { shifting all the elements to left from specified index array[i]="array[i" + 1]; } array[count 1]="0;" count--; public static void main(string[] args) dynamicarrayexample2 da="new" dynamicarrayexample2(); adding array da.addelement(12); da.addelement(22); da.addelement(35); da.addelement(47); da.addelement(85); da.addelement(26); da.addelement(70); da.addelement(81); da.addelement(96); da.addelement(54); system.out.println(\'elements of array:\'); iterate over for accessing (int i="0;" < da.sizeofarray; system.out.print(da.array[i] \' \'); system.out.println(); determines and prints size number system.out.println(\'size array: da.sizeofarray); system.out.println(\'no. in da.count); invoking method delete last element da.removeelement(); after deleting system.out.print(\' elements element: system.out.print(\'no. da.count+\' \'); that deletes an da.removeelementat(7); at 7: pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/02/dynamic-array-java-7.webp" alt="Dynamic Array in Java"> <hr></count></count;></sizeofarray;></pre></da.sizeofarray;></sizeofarray;>