قائمة ArrayList المخصصة في Java
قبل المضي قدمًا، دعونا نراجع بسرعة مفهوم صفائف و ArrayList بسرعة. لذلك رأينا في جافا أن المصفوفات عبارة عن هياكل بيانات خطية توفر وظائف لإضافة عناصر بطريقة مستمرة في مساحة عنوان الذاكرة بينما ArrayList عبارة عن فئة تنتمي إلى إطار عمل المجموعة. كونه مبرمجًا جيدًا، فهو يدرك بالفعل استخدام ArrayList على المصفوفات على الرغم من معرفة الاختلافات بين هذين الاثنين. الآن نمضي قدمًا حتى مع ArrayList، حيث تأتي وظيفة لتمرير نوع بيانات العناصر التي من المفترض أن يتم تخزينها في ArrayList سواء كانت عبارة عن عدد صحيح لسلسلة كائنات ذات تعويم مزدوج وما إلى ذلك.
بناء الجملة:
Arraylistal = new ArrayList ; ملحوظة: ArrayList في Java (أي ما يعادل المتجه في C++) ذات حجم ديناميكي. يمكن تقليصها أو توسيعها على أساس الحجم. يعد ArrayList جزءًا من إطار عمل المجموعة وهو موجود في حزمة java.util .
بناء الجملة:
ArrayListlist = new ArrayList <> (); الشيء المهم هنا هو أن E هنا يمثل نوع بيانات كائن تخيله عدد صحيح هنا. تغلف فئة Integer قيمة من النوع البدائي كثافة العمليات في كائن. يحتوي كائن من النوع Integer على حقل واحد نوعه int. هل تذهب من خلال مفهوم فئات المجمع في Java قبل المضي قدمًا لأنه سيخدم هنا في الواجهة الخلفية مما يجعل الفهم أكثر وضوحًا إذا كنا ندرك ذلك جيدًا مفاهيم autoboxing وunboxing . وذلك لأنه أثناء إجراء العمليات على العناصر في القائمة، سيختلف بناء الجملة الخاص بها، لذا فإن استيعاب المفهوم سوف يستنفد كما لو افترضنا النظر في سيناريو إضافة عناصر إلى ArrayList المخصصة وملاحظة الاختلافات في بناء الجملة بين اثنين منهم.
بناء الجملة:
ArrayListal = new Arraylist () ;
al.add(1) ;بناء الجملة:
ArrayList alobj = new Arraylist() ;
alobj(new Integer(1)) ;دعونا نأخذ مثالاً توضيحيًا لندركه كما هو موضح أدناه على النحو التالي:
توضيح:
![]()
لدينا هنا جميع العناصر من نفس النوع والتي غالبًا ما نستخدمها بشكل عام. الآن دعونا نقترح نفس التدفق التخطيطي ArrayList يدعم ببساطة بيانات متعددة بالطريقة الموضحة في هذه الصورة.
![]()
في ArrayList أعلاه يمكننا أن نرى بوضوح أن العناصر المخزنة فيها هي من أنواع مختلفة. لذلك لا تندلع مفهوم تقييد. إلى نوع واحد وليس هذه القائمة فقط، فهي تمنحنا المرونة اللازمة لإنشاء القائمة وفقًا لنوعنا حيث يمكننا الوصول إلى نوع البيانات التي يمكن أن تكون موجودة في ArrayList الخاصة بنا. يشار إلى هذه القائمة باسم Custom ArrayList في Java . تحتوي قائمة ArrayList المخصصة على سمات تعتمد على متطلبات المستخدم ويمكن أن تحتوي على أكثر من نوع واحد من البيانات. يتم توفير هذه البيانات من خلال فئة داخلية مخصصة يتم تشكيلها من خلال مجموعة من أنواع بيانات الكائنات البدائية المختلفة.تطبيق: النظر في الحالة عندما يتعين علينا أن نأخذ المدخلات كما ن عدد الطلاب والتفاصيل هي:
- رقم لفة
- اسم
- علامات
- رقم التليفون
لنفترض أننا إذا لم نكن على دراية بمفهوم قائمة المصفوفات المخصصة في جافا، فسنقوم بإنشاء قوائم ArrayLists الفردية المدرجة أدناه. حيث أننا نحدد 4 قوائم ArrayLists ونحفظ البيانات وفقًا لذلك في كل منها.
ArrayListroll = new ArrayList <>(); // roll number ArrayListname = new ArrayList <>(); // name ArrayListmarks = new ArrayList <>(); // marks ArrayListphone = new ArrayList <>(); // phone number سنقوم الآن بتكرار كل منها لجلب بيانات الطلاب مما يزيد من التعقيد الزمني لبرنامجنا إلى حد أكبر كما هو موضح أدناه على النحو التالي.
for (int i = 0; i < n; i++)
{
// Adding all the values to each arraylist
// each arraylist has primitive datatypes
roll.add(rollnum_i);
name.add(name_i);
marks.add(marks_i);
phone.add(phone_i);
}الآن دعونا نفعل الشيء نفسه بمساعدة المفهوم الذي تعلمناه أعلاه من خلال تنفيذ نفس الشيء. لذلك، من أجل إنشاء قائمة ArrayList المخصصة لدينا، قم بتنفيذ الخطوات المذكورة أدناه على النحو التالي:
إجراء: إنشاء ArrayList مخصص كما يلي:
- قم ببناء كائن ArrayList ووضع نوعه كبيانات فئة.
- تحديد فئة ووضع الكيانات المطلوبة في المنشئ.
- ربط تلك الكيانات بالمتغيرات العالمية.
- البيانات الواردة من ArrayList هي من نوع الفئة الذي يخزن بيانات متعددة.
مثال
Java// Java program to illustrate Custom ArrayList // Importing ArrayList class from java.util package import java.util.ArrayList ; // Class 1 // Outer class // Main class // CustomArrayList class Data { // Global variables of the class int roll ; String name ; int marks ; long phone ; // Constructor has type of data that is required Data ( int roll String name int marks long phone ) { // Initialize the input variable from main // function to the global variable of the class // this keyword refers to current instance this . roll = roll ; this . name = name ; this . marks = marks ; this . phone = phone ; } } public class GFG { // Custom class which has data type class has // defined the type of data ArrayList // size of input 4 int n = 4 ; // Class 2 // Inner class // The custom datatype class public void addValues ( int roll [] String name [] int marks [] long phone [] ) { // local custom arraylist of data type // Data having (int String int long) type // from the class ArrayList < Data > list = new ArrayList <> (); for ( int i = 0 ; i < n ; i ++ ) { // create an object and send values to the // constructor to be saved in the Data class list . add ( new Data ( roll [ i ] name [ i ] marks [ i ] phone [ i ] )); } // after adding values printing the values to // test the custom arraylist printValues ( list ); } // Method 2 // To print the values public void printValues ( ArrayList < Data > list ) { // list- the custom arraylist is sent from // previous function for ( int i = 0 ; i < n ; i ++ ) { // Data received from arraylist is of Data // type which is custom (int String int // long) based on class Data Data data = list . get ( i ); // Print and display custom ArrayList // elements that holds for student attribute // Data variable of type Data has four // primitive datatypes roll -int name- // String marks- int phone- long System . out . println ( data . roll + ' ' + data . name + ' ' + data . marks + ' ' + data . phone ); } } // Method 1 // Main driver method public static void main ( String args [] ) { // Custom input data int roll [] = { 1 2 3 4 }; String name [] = { 'Shubham' 'Atul' 'Ayush' 'Rupesh' }; int marks [] = { 100 99 93 94 }; long phone [] = { 8762357381L 8762357382L 8762357383L 8762357384L }; // Creating an object of the class GFG custom = new GFG (); // Now calling function to add the values to the // arraylist custom . addValues ( roll name marks phone ); } }
الإخراج1 Shubham 100 8762357381 2 Atul 99 8762357382 3 Ayush 93 8762357383 4 Rupesh 94 8762357384يمكن إنشاء قائمة ArrayList مخصصة في Java عن طريق توسيع فئة java.util.AbstractList وتنفيذ أساليبها. فيما يلي مثال لكيفية إنشاء قائمة ArrayList مخصصة:
Javaimport java.util.AbstractList ; import java.util.Arrays ; import java.util.List ; public class CustomArrayList < E > extends AbstractList < E > { private int size = 0 ; private static final int DEFAULT_CAPACITY = 10 ; private Object elements [] ; public CustomArrayList () { elements = new Object [ DEFAULT_CAPACITY ] ; } public CustomArrayList ( int capacity ) { elements = new Object [ capacity ] ; } @Override public int size () { return size ; } @Override public E get ( int index ) { if ( index >= size || index < 0 ) { throw new IndexOutOfBoundsException ( 'Index: ' + index + ' Size ' + index ); } return ( E ) elements [ index ] ; } @Override public void add ( int index E element ) { if ( index > size || index < 0 ) { throw new IndexOutOfBoundsException ( 'Index: ' + index + ' Size ' + index ); } ensureCapacity (); for ( int i = size - 1 ; i >= index ; i -- ) { elements [ i + 1 ] = elements [ i ] ; } elements [ index ] = element ; size ++ ; } @Override public E remove ( int index ) { if ( index >= size || index < 0 ) { throw new IndexOutOfBoundsException ( 'Index: ' + index + ' Size ' + index ); } Object item = elements [ index ] ; for ( int i = index ; i < size - 1 ; i ++ ) { elements [ i ] = elements [ i + 1 ] ; } size -- ; return ( E ) item ; } private void ensureCapacity () { int newSize = elements . length * 2 ; elements = Arrays . copyOf ( elements newSize ); } public static void main ( String [] args ) { List < Integer > list = new CustomArrayList <> (); list . add ( 1 ); list . add ( 2 ); list . add ( 3 ); System . out . println ( 'CustomArrayList: ' + list ); } }
الإخراجCustomArrayList: [1 2 3]في هذا المثال، يتم إنشاء ArrayList المخصص عن طريق توسيع فئة AbstractList وتنفيذ حجم الأساليب الخاص بها من خلال الإضافة والإزالة. تحتوي ArrayList المخصصة أيضًا على طريقة خاصة تسمى ضمان السعة والتي تضاعف حجم ArrayList إذا نفدت المساحة.
مزايا استخدام ArrayList مخصص في Java:
- المرونة: يتيح لك إنشاء ArrayList مخصص تخصيص سلوك ArrayList لتلبية الاحتياجات المحددة لتطبيقك.
- الفهم: يمكن أن يساعدك إنشاء ArrayList الخاص بك من البداية على فهم كيفية عمل ArrayLists وكيفية استخدامها بفعالية.
عيوب استخدام ArrayList مخصص في Java:
- استهلاك الوقت: يمكن أن يستغرق إنشاء قائمة ArrayList مخصصة وقتًا طويلاً ويتطلب خدمة جيدة
إنشاء اختبار