معرفی ArrayList
یکی از پیاده سازی های List کلاس ArrayList است؛ با استفاده از کلاس ArrayList در جاوا میتونیم عناصر رو به صورت آرایهوار نگهداری کنیم؛ در ArrayList میتونیم عناصر رو حذف کنیم، اضافه کنیم یا صدا بزنیم.
تفاوت ArrayList با آرایه ها در جاوا در دینامیکی بودن سایز (طول) ArrayList است، بر خلاف آرایه ها که اندازه ی ثابتی دارن، اندازه ی ArrayList با افزودن یا حذف کردن عناصر تغییر میکنه و میگیم اندازه (size) کلاس ArrayList دینامیکی (dynamically) است.
زمانی که در برنامه بخوایم به عناصر با index به صورت تصادفی دسترسی داشته باشیم از ArrayList استفاده می کنیم.
به تعداد خونه های ArrayList برای نگهداری عناصر ظرفیت (capacity) آرایه لیست گفته میشه، زمانی که ظرفیت پر بشه، به صورت خودکار افزایش پیدا می کنه؛ به تعداد عناصری که در خونه های capacity ذخیره میشن اندازه (size) آرایه لیست میگیم.
در تصویر زیر ساختار یک ArrayList به اندازه n و ظرفیت n+k شرح داده شده است
استفاده از ArrayList
زمانی که بخوایم به عناصر با index به صورت تصادفی دسترسی داشته باشیم ArrayList گزینه ی مناسبی میتونه باشه.
اکثر متد های ArrayList در اینترفیس List تعریف شدن و در ArrayList بازنویسی شدن.
در UML زیر سلسه مراتب ارث بری کلاس ArrayList در جاوا شرح داده شده است.
متد های ArrayList، داخل اینترفیس List تعریف شدن که با پیادهسازی List در ArrayList این متد ها بازنویسی میشن.
در زیر نمودار UML کلاس ArrayList و متد های تعریف شده در این کلاس با توضیحاتشون آورده شده است.
| java.util.ArrayList | |
|---|---|
| +ArrayList() | یک نمونه از ArrayList ایجاد می کنه. |
| +ArrayList(c: Collection<? extends E>) | یک نمونه از ArrayList ایجاد می کنه و اعضای کالکشن c رو بهش اضافه می کنه. |
| +ArrayList(capacity: int) | یک نمونه از ArrayList با ظرفیت اولیه ی مشخص ایجاد میکنه. |
| +trimToSize(): void | ظرفیت ArrayList رو به تعداد عناصر (سایز)ArrayList کاهش میده. |
در مثال زیر میخوایم به استفاده از ArrayList و متد های توضیح داده شده در List بپردازیم.
List<String> cities = new ArrayList<>();
cities.add("Arak");
cities.add("Tehran");
cities.add("Mashhad");
cities.add("Hamedan");
cities.add("Sanandaj");
cities.add(0, "Kermanshah");
cities.add(3, "Rasht");
System.out.println("A list of cities in arraylist: ");
System.out.println(list);
System.out.println(list.remove(4) + " removed from list");
System.out.println("Now cities in arraylist are ");
System.out.println(cities);
در مثال زیر با حلقه ی for به پیمایش در ArrayList می پردازیم.
List<Integer> list = new ArrayList<>();
list.add(8);
list.add(21);
list.add(12);
list.add(14);
list.add(32);
list.add(10);
list.add(30);
System.out.println("The size of list is " + list.size());
System.out.println("List of numbers: ");
for(int i=0; i<list.size(); i++)
System.out.print(list.get(i) + " ");
پیچیدگی زمان متد های ArrayList
در این قسمت به پیچیدگی زمان متد های ArrayList می پردازیم، در جدول زیر پیچیدگی زمان این متد ها در بدترین حالت (worst case) شرح داده شده است.
| ArrayList | |
|---|---|
| متد | پیچیدگی زمان (Time Complexity) |
| add(E): boolean | O(n)/O(1) (amortized) |
| add(int, E): void | O(n) | get(int): E | O(1) |
| remove(int): E | O(n) |
| set(int, E): E | O(1) |
| contains(Object): boolean | O(n) |
خلاصه
- از ArrayList برای دسترسی به عناصر با index به صورت تصادفی استفاده میکنیم.
- اکثر متد های ArrayList در اینترفیس List تعریف شده اند.
بازخورد و دیدگاه ها
اولین نفری باشید که در این صفحه نظر میدهید