کلاس ArrayList

کلاس ArrayList به شما اجازه ذخيره مقادير انواع داده اي مختلف، و توانايي حذف و اضافه عناصر آرايه در هر لحظه را مي دهد. این کلاس رابط List را پیاده سازی می کند. در مثال زير به سادگي کاربرد کلاس ArrayList آمده است.

package myfirstprogram;

import java.util.ArrayList;

public class MyFirstProgram 
{
    public static void main(String[] args) 
    {
        ArrayList myArray = new ArrayList();

        myArray.add("John");
        myArray.add(5);
        myArray.add(true);
        myArray.add(3.65);
        myArray.add('R');

        for (Object element : myArray)
        {
            System.out.println(element);
        } 
    } 
}
John
5
true
3.65
R

براي استفاده از اين کلاس ابتدا بايد در قسمت فضاهاي نامي ، فضاي نام java.util.ArrayList را وارد کنيم(خط 3). همانطور که در مثال مشاهده مي کنيد يک نمونه از کلاس ArrayList ايجاد مي کنيم. براي اضافه کردن يک عنصر به آرايه بايد از متد ()add استفاده کنيم. از آنجاييکه شي ايجاد شده از کلاس ArrayList آرگوماني از نوع Object قبول مي کند بنابراين مي توان مقاديري از هر نوع داده اي به آن ارسال کرد.

حال براي نمايش توانايي اين کلاس در نگهداري انواع داده اي مختلف پنج مقدار از پنج نوع مختلف داده را به آن اضافه مي کنيم. سپس همه مقادير را با استفاده از دستور foreach مي خوانيم. چون کلاس ArrayList داراي انواع داده اي مختلفي است نمي توانيم از يک نوع داده اي خاص براي خواندن مقادير استفاده کنيم . لذا براي اين کار بايد از نوع Object که مي تواند هر نوع داده اي در خود ذخيره کند استفاده نمود. به اين نکته توجه کنيد که براي دسترسي به هر عنصر مي توانيد از طريق انديس آن اقدام نماييد. کد زير نحوه استفاده از حلقه for براي دسترسي به هر يک از اعضا را نشان مي دهد.

for (int i = 0; i < myArray.size(); i++)
{
    System.out.println(myArray.get(i));
}

به متد ()size در کد بالا توجه کنيد. اين متد درست شبيه به خاصيت length آرايه معمولي است و کار آن شمارش تعداد عناصر شي ArrayList مي باشد.. در کد بالا همانطور که نشان داده شده است مي توان به هر يک از عناصر با استفاده از انديس شان دست يافت (get(i)). نکته ديگر اين است که شما مي توانيد به کلاس ArrayList يک ظرفيت ابتدايي بدهيد. به عنوان مثال شما مي توانيد با استفاده از يک سازنده سربارگذاري شده نشان دهيد که يک شي ArrayList مي تواند داراي 5 عنصر باشد.

ArrayList myArray = new ArrayList(5);

کد بالا 5 مکان خالي به وجود مي آورد و شما مي توانيد با استفاده از متد ()add يکي ديگر به آنها اضافه کنيد. مي توان با استفاده از متد ()remove کلاس ArrayList عناصر را پاک کرد. متد ()remove يک شي که مطابق مقدار يک عنصر در آرايه است را قبول مي کند. اين متد به محض رسيدن به مقدار مورد نظر آن را حذف مي کند. اگر عنصري را که مکاني غير از مکان آخر آرايه باشد حذف کنيد بقيه عناصر بعد از آن عنصر مکان خود را تنظيم مي کنند به اين معني که فرض کنيد آرايه اي داراي 5 عنصر است و شما عنصر 3 را حذف مي کنيد، در اين صورت جاي خالي اين عنصر توسط عنصر 4 و جاي عنصر 4 توسط عنصر 5 پر مي شود. به تکه کد زير توجه کنيد :

   1: package myfirstprogram;
   2: 
   3: import java.util.ArrayList;
   4: import java.text.MessageFormat;
   5: 
   6: public class MyFirstProgram 
   7: {
   8:     public static void main(String[] args) 
   9:     {
  10:         ArrayList myArray = new ArrayList();
  11: 
  12:         myArray.add("John");
  13:         myArray.add(5);
  14:         myArray.add(true);
  15:         myArray.add(3.65);
  16:         myArray.add('R');
  17:         
  18:         for (int i = 0; i < myArray.size(); i++)
  19:         {
  20:             System.out.println(MessageFormat.format("myArray[{0}] = {1}", i, myArray.get(i)));
  21:         }
  22: 
  23:         myArray.remove(2);
  24: 
  25:         System.out.println("\nAfter removing myArray[1] (The value true)...\n");
  26: 
  27:         for (int i = 0; i < myArray.size(); i++)
  28:         {
  29:             System.out.println(MessageFormat.format("myArray[{0}] = {1}", i, myArray.get(i)));
  30:         }
  31:     } 
  32: }
myArray[0] = John
myArray[1] = 5
myArray[2] = true
myArray[3] = 3.65
myArray[4] = R

After removing myArray[2] (The value 5)...

myArray[0] = John
myArray[1] = 5
myArray[2] = 3.65
myArray[3] = R

از آنجاييکه در مثال بالا مقدار عنصر myArray[2] را حذف کرده ايم (خط 23) همه عناصر متوالي در آرايه بالا مکان خود را تغيير مي دهند. بنابراين عنصر myArray[3] جاي myArray[2]، عنصر myArray[4] جاي myArray[3] و …را مي گيرد.

جستجو، جایگزینی و به دست آوردن اندیس مقادير

با استفاده از متد ()contains مي توان چک کرد که آيا يک مقدار خاص در داخل آرايه وجود دارد يا خير. اين متد يک آرگومان از نوع شي را قبول کرده و اگر يک مقدار را در داخل ليست عناصر پيدا کند true را بر مي گرداند، از متدهاي ()indexOf و ()lastIndexOf براي تشخيص انديس يک مقدار خاص استفاده مي شود.

متد ()IndexOf انديس اولين محل وقوع يک مقدار خاص را بر مي گرداند.

متد ()LastIndexOf انديس آخرين محل وقوع يک مقدار خاص را بر مي گرداند.

هر دو متد، در صورتيکه مقدار مورد نظر را پيدا نکنند مقدار 1- را بر مي گردانند.

برای جایگزین کردن یک مقدار با یک مقدار موجود در ArrayList از متد ()set استفاده می شود. فرض کنید که می خواهید عدد 15 را جایگزین عدد 5 در مثال بالا کنید برای اینکار باید به صورت زیر عمل کنید :

myArray.set(2,15);

عدد 2 در مثال بالا نشان دهنده اندیس مقداری از ArrayList است که ما می خواهیم مقداری دیگر را جایگزین آن کنیم. در این مثال اندیس 2 نشان دهنده مقدار 5 است.
برای به دست آوردن تعداد عناصر در یک Arraylist از متد ()size

myArray.size()

و برای پاک کردن همه عناصر از متد ()clear استفاده می شود :

myArray.clear();

مرتب سازي مقادير ArrayList

مرتب سازی در ArrayList زمانی معنا دارد که همه آیتم ها از یک نوع مثلا عدد صحیح باشند. برای ایجاد یک کلاس ArrayList از یک نوع خاص به صورت زیر عمل می شود :

ArrayList <type> CollectionName = new ArrayList();

که در آن type نوع داده ای مجموعه و CollectionName نامی است که برای مجموعه انتخاب کرده ایم. فرض کنید که می خواهیم یک مجموعه از نوع اعداد صحیح ایجاد و مرتب کنیم. به مثال زیر توجه کنید :

   1: package myfirstprogram;
   2: 
   3: import java.util.ArrayList;
   4: import java.util.Collections;
   5: import java.text.MessageFormat;
   6: 
   7: public class MyFirstProgram 
   8: {
   9:     public static void main(String[] args) 
  10:     {
  11:         ArrayList <Integer> myArray = new ArrayList();
  12: 
  13:         myArray.add(1);
  14:         myArray.add(5);
  15:         myArray.add(3);
  16:         myArray.add(2);
  17:         
  18:         Collections.sort(myArray);
  19:          
  20:         for (int i = 0; i < myArray.size(); i++)
  21:         {
  22:             System.out.println(MessageFormat.format("myArray[{0}] = {1}", i, myArray.get(i)));
  23:         }
  24:     } 
  25: }
myArray[0] = 1
myArray[1] = 2
myArray[2] = 3
myArray[3] = 5

همانطور که در مثال بالا مشاهده می کنید در خط 4 پکیج Collections را وارد برنامه کرده ایم. وجود این پکیج برای مرتب سازی الزامی است. در خط 11 یک مجموعه از نوع اعداد صحیح ایجاد و در خطوط 19-16 به صورت نامرتب چند آیتم به آن اضافه کرده ایم. سپس در خط 18 با استفاده از متد ()sort کلاس Collections مجموعه را مرتب نموده ایم.
با استفاده از متد ()sort مي توان مقادير يک آرايه را مرتب نمود. اعداد از بزرگ به کوچک و رشته بر اساس حروف الفبا مرتب مي شوند. اگر از اين متد استفاده کنيد همه اجزا با هم مقايسه مي شوند. به عنوان مثال نمي توان يک رشته و يک عدد از نوع int را در داخل ArrayList قرار داد و آنها را با متد Sort مرتب نمود. در درس آينده ياد خواهيد گرفت که چگونه از يک مقايسه گر سفارشي براي مرتب کردن عناصر استفاده نمود.