کالکشن ArrayList در جاوا
ArrayList در جاوا یک لیست پویا و قابل تغییر اندازه است که دسترسی سریع به عناصر را با متدهایی مثل add و remove فراهم میکند.
18 اردیبهشت 1405
لینک کوتاه
ArrayList در Java چیست؟
ArrayList در جاوا یک لیست مبتنی بر آرایه با قابلیت تغییر اندازه پویا است.این کلاس از اینترفیس List ارثبری میکند و امکان ذخیره المانهای تکراری، نال و دسترسی مستقیم به هر ایندکس را فراهم میکند.
برخلاف Array، اندازه آن ثابت نیست و متدهای مفیدی مانند() add()، remove()، get و ()size دارد.
این کلاس در پکیج java.util قرار دارد و برای استفاده باید آن را import کرد.
ArrayList برخلاف LinkedList، برای جستجو و دسترسی تصادفی بسیار بهینه است اما برای حذف و اضافه در میانه لیست عملکرد ضعیفتری دارد.
نحوه استفاده از ArrayList در Java
برای کار با ArrayList باید مراحل زیر را طی کنید:1. import کردن پکیج
import java.util.ArrayList;
2. ایجاد شیء از ArrayList
ArrayList<String> names = new ArrayList<>();
3. اضافه کردن عنصر
names.add("Ali");
names.add("Reza");
names.add(1, "Sara"); // اضافه کردن در ایندکس 1
4. دسترسی به عناصر
String first = names.get(0); // Ali
5. حذف عنصر
names.remove(0); // حذف با ایندکس
names.remove("Sara"); // حذف با شیء
6. گرفتن تعداد عناصر
int size = names.size();

تفاوت Array و ArrayList در Java
| ویژگی | ArrayList | Array |
| اندازه | ثابت (تعیین شده در زمان ایجاد) | پویا (قابل تغییر) |
| نوع داده | میتواند اولیه (int, char) یا شیء باشد | فقط شیء (برای انواع اولیه باید از کلاس wrapper مثل Integer استفاده کرد) |
| سرعت | کمی سریعتر | کمی کندتر به دلیل عملیات داخلی resize |
| متدهای کمکی | فقط length | متدهای متعدد (add, remove, contains, indexOf و ...) |
| فضای خالی | دارد (اگر اندازه > تعداد عناصر) | مدیریت خودکار |
| پشتیبانی از جنریک | خیر | بله |
مزایای ArrayList نسبت به Array در Java
-
اندازه پویا – بدون نیاز به تعیین طول نهایی.
-
متدهای آماده برای عملیات رایج مثل جستجو و حذف.
-
قابلیت تبدیل به آرایه با ()toArray.
-
پشتیبانی از Iterator برای پیمایش.
-
امکان ذخیره null در چندین جای لیست.

متدهای مهم ArrayList در Java
در ادامه مهمترین متدهای ArrayList را با توضیح کوتاه مرور میکنیم: -
add(E e)
اضافه کردن عنصر به انتهای لیست -
add(int index, E element)
اضافه کردن در ایندکس مشخص -
get(int index)
برگرداندن عنصر در ایندکس داده شده -
set(int index, E element)
جایگزینی عنصر در ایندکس مشخص -
remove(int index)
حذف عنصر در ایندکس و برگرداندن آن -
remove(Object o)
حذف اولین رخداد عنصر مشخص -
()size
تعداد کل عناصر -
()isEmpty
بررسی خالی بودن لیست -
()clear
پاک کردن تمام عناصر -
contains(Object o)
بررسی وجود عنصر -
indexOf(Object o)
برگرداندن اولین ایندکس یک عنصر -
lastIndexOf(Object o)
برگرداندن آخرین ایندکس عنصر -
()toArray
تبدیل ArrayList به آرایه -
sort(Comparator c)
مرتبسازی لیست (از جاوا ۸) -
forEach(Consumer action)
پیمایش با lambda
🚀 از صفر تا قهرمان جاوا، فقط با یک دوره!
به دنبال یه فرصت طلایی برای شروع برنامهنویسی میگردی؟
دوره آموزشی جاوا ما، همون چیزیه که نیاز داری!✨ چرا این دوره رو انتخاب میکنی؟
🎯 از مبتدی تا حرفهای
بدون پیشزمینه شروع میکنی و به یه برنامهنویس جاوا تبدیل میشی که بازار کار منتظرته!🛠 پروژهمحور و عملی
با انجام پروژههای واقعی، کدنویسی رو یاد میگیری، نه فقط تئوری!👨🏫 پشتیبانی همیشگی
هرجا گیر کنی، تیم پشتیبانی کنارته تا مشکلت حل بشه.🔓 دسترسی مادامالعمر
هر وقت خواستی به محتوا دسترسی داری، برای همیشه!
مثال عملی کامل (مدیریت لیست دانشجویان)
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
// ایجاد ArrayList
ArrayList<String> students = new ArrayList<>();
// اضافه کردن دانشجو
students.add("Zahra");
students.add("Mohammad");
students.add("Negin");
System.out.println("لیست اولیه: " + students);
// اضافه کردن در ایندکس 1
students.add(1, "Hossein");
System.out.println("بعد از اضافه کردن حسین: " + students);
// دسترسی به عنصر
String second = students.get(1);
System.out.println("دانشجوی دوم: " + second);
// حذف با ایندکس
students.remove(0);
System.out.println("بعد از حذف ایندکس صفر: " + students);
// بررسی وجود عنصر
if (students.contains("Negin")) {
System.out.println("نگین در لیست هست");
}
// مرتبسازی
Collections.sort(students);
System.out.println("لیست مرتب شده: " + students);
// پیمایش با for-each
for (String s : students) {
System.out.println("دانشجو: " + s);
}
}
}
ظرفیت اولیه (Initial Capacity)
زمانی که ArrayList ایجاد میکنید، یک آرایه داخلی با ظرفیت اولیه 10 ساخته میشود (مگر اینکه عدد دیگری بدهید).اگر بیش از ظرفیت پر شود، یک آرایه جدید با اندازه (oldCapacity * 3)/2 + 1 ساخته میشود و دادهها کپی میشوند. این عملیات هزینه دارد.
برای بهینهسازی میتوانید ظرفیت اولیه را مشخص کنید:
ArrayList<Integer> numbers = new ArrayList<>(1000);
همگامسازی (Thread-Safety)
ArrayList همگامساز (synchronized) نیست.اگر چند نخ به طور همزمان به آن دسترسی داشته باشند و حداقل یکی تغییر ایجاد کند، باید از روشهای همگامسازی استفاده کنید:
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
استفاده با انواع اولیه
ArrayList فقط شیء قبول میکند. برای انواع اولیه باید از کلاسهای wrapper استفاده کنید:ArrayList<Integer> scores = new ArrayList<>(); // int مجاز نیست
scores.add(10); // autoboxing
int firstScore = scores.get(0); // unboxing
تبدیل ArrayList به Array و بالعکس
-
تبدیل ArrayList به Array
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
String[] array = list.toArray(new String[0]);
-
تبدیل Array به ArrayList
String[] arr = {"X", "Y", "Z"};
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(arr));
پاسخ به سوالات رایج
سوال: آیا ArrayList میتواند عناصر تکراری داشته باشد؟
بله، ArrayList اجازه ذخیره عناصر تکراری و همچنین null را میدهد.سوال: فرق بین size و capacity در ArrayList چیست؟
size تعداد واقعی عناصر داخل لیست است، اما capacity اندازه آرایه داخلی است که ممکن است بزرگتر از size باشد.سوال: بهترین روش برای پیمایش ArrayList چیست؟
اگر فقط نیاز به خواندن دارید، حلقه for-each یا forEach با lambda بهترین است. اگر نیاز به حذف همزمان دارید، از Iterator استفاده کنید.اشتباهات رایج هنگام کار با ArrayList
- استفاده از نوع اولیه – باید از wrapper استفاده کرد.
- فراموش کردن import – حتماً java.util.ArrayList را import کنید.
- حذف در حین پیمایش با for-each – باید از Iterator استفاده کنید یا از removeIf در جاوا ۸.
- استفاده از ArrayList در محیط چندنخی بدون همگامسازی – باعث بروز دادههای ناهماهنگ میشود.
جمعبندی
ArrayList در جاوا یکی از انعطافپذیرترین و پرکاربردترین ساختارهای داده است.اگر نیاز به لیستی با اندازه متغیر، دسترسی سریع بر اساس ایندکس و عملیات نسبتاً کم حذف و اضافه در وسط دارید، ArrayList انتخاب مناسبی است.
یادگیری متدهای کلیدی آن و تفاوتش با Array پایهای برای برنامهنویسی جاوا محسوب میشود.


کاربران ما
شما هم نظرتون با ما دریاره “کالکشن ArrayList در جاوا” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید