ArrayList برای ذخیره لیستی از داده های مرتب شده مناسب است. دریابید که چگونه می توانید از آن در پروژه های خود استفاده کنید.
Java ArrayList یک آرایه همه منظوره قابل تغییر اندازه است. چندین ویژگی مفید را ارائه می دهد که بر روی داده های موجود در آن عمل می کند. شما می توانید با استفاده از یک شاخص به عناصر دسترسی پیدا کنید، عملیات CRUD را انجام دهید، اندازه آرایه را تغییر دهید و روی عناصر آن تکرار کنید.
برای استفاده از ArrayList در برنامه خود، ابتدا باید بسته java.util.ArrayList را وارد کنید. این امکان دسترسی به سه سازنده ArrayList را به همراه چندین روش فراهم می کند. برخی از متدهای محبوب ArrayList عبارتند از add()، addAll()، set()، get()، indexOf() و remove().
زیر کلاس های AbstractList
کلاس AbstractList رابط List را پیاده سازی می کند و به شما امکان دسترسی به ساختارهای داده مانند ArrayList را می دهد. سایر زیر کلاس های مستقیم و غیر مستقیم AbstractList عبارتند از:
- ساختار داده LinkedList از درج و حذف سریع در شاخص های میانی پشتیبانی می کند.
- ساختار داده Vector مانند ArrayList است، اما همگام شده است. برای استفاده به جای ArrayList برای برنامه های چند رشته ای مناسب است.
- ساختار داده Stack از عملیاتی برای تقلید از لیست آخرین در اول پشتیبانی می کند. طبیعتاً همگام می شود زیرا کلاس Vector را گسترش می دهد.
این کلاس های ویژه خارج از موضوع این مقاله است. با این حال، شما یاد خواهید گرفت که چگونه یک جاوا ArrayList همه منظوره را راه اندازی و استفاده کنید.
ایجاد یک ArrayList
ایجاد ArrayList در جاوا ساده است. شما می توانید یک ArrayList خالی با استفاده از سازنده no-arguments ایجاد کنید.
کد زیر یک ArrayList خالی برای نگهداری رشته ها ایجاد می کند.
ArrayList<String> alist = new ArrayList<String>();
اگر می دانید فهرست آرایه شما شامل چند آیتم است، می توانید ظرفیت اولیه را مشخص کنید. این ظرفیت اولیه فقط یک اشاره برای تخصیص حافظه است. چه ظرفیتی را مشخص کنید یا نه، ArrayList هیچ محدودیتی در حافظه ندارد. اگر ظرفیت اولیه را بدانید و مشخص کنید، ممکن است کمی بهبود عملکرد داشته باشید.
ArrayList<String> alist = new ArrayList<String>(8);
کد بالا یک ArrayList (alist) ایجاد می کند که هشت موقعیت شاخص را در حافظه اختصاص می دهد.
پر کردن یک ArrayList
افزودن موارد در پایان
پر کردن یک ArrayList بسیار آسان است. فقط از متد add() برای اضافه کردن یک آیتم به انتهای ArrayList استفاده کنید. به عنوان مثال:
ArrayList<String> alist = new ArrayList<String>();
alist.add("apple");
alist.add("banana");
alist.add("cantaloupe");
alist.add("orange");
System.out.println(alist);
کد بالا خروجی زیر را در کنسول نمایش می دهد:
[apple, banana, cantaloupe, orange]
متد size() تعداد آیتم های یک ArrayList را برمی گرداند.
System.out.println("Number of elements in the arraylist: " + alist.size());
// Prints
// Number of elements in the arraylist: 4
افزودن اقلام در یک شاخص مشخص
آیا می خواهید یک مورد را در یک موقعیت شاخص خاص اضافه کنید؟ به سادگی متد add() را با موقعیت ایندکسی که می خواهید استفاده کنید و به دنبال آن موردی که می خواهید اضافه کنید ارائه دهید:
alist.add(3, "grapes");
System.out.println(alist);
کد بالا خروجی زیر را در کنسول نمایش می دهد:
[apple, banana, cantaloupe, grapes, orange]
در ArrayList بالا متوجه خواهید شد که “انگور” چهارمین لیست است. از آنجایی که جاوا ArrayList از موقعیت شاخص صفر شروع می شود، این در موقعیت شاخص سه است.
افزودن دسته ای از آیتم ها
همچنین میتوانید مواردی را از هر مجموعهای در سلسله مراتب Java Collections اضافه کنید. ArrayList یک نوع خاص به نام List است. در اینجا راهی برای ساختن یک لیست از دسته ای از آیتم ها (با استفاده از Arrays.asList()) و اضافه کردن آن به یک ArrayList وجود دارد.
List<String> items = Arrays.asList("pear", "cherry");
alist.addAll(items);
System.out.println(alist);
// prints
// [apple, banana, cantaloupe, grapes, orange, pear, cherry]
همچنین می توانید یک شاخص به عنوان اولین آرگومان متد addAll() ارائه دهید. این به شما امکان می دهد لیست آیتم ها را در هر موقعیتی در ArrayList قرار دهید.
دسترسی به موارد
پس از اینکه آیتم ها را به یک ArrayList اضافه کردید، چگونه دوباره به آنها دسترسی پیدا می کنید؟
دسترسی به موارد با نمایه
اگر شاخص آیتم را می دانید، می توانید از متد get() برای بازیابی عنصر در موقعیت شاخص خاص استفاده کنید.
String item = alist.get(2);
System.out.println("Item at index 2 is: " + item);
// prints
//Item at index 2 is: cantaloupe
پیداکردن موارد
اگر فهرست آیتم را ندانید چه؟ می توانید از indexOf() برای بررسی اینکه آیا آیتم در آرایه وجود دارد یا خیر استفاده کنید و با استفاده از ایندکس برگشتی آیتم را بازیابی کنید.
System.out.println(alist);
int index = alist.indexOf("orange");
if (index < 0) {
System.out.println("Item \"orange\" not found");
} else {
System.out.println("Item \"orange\" found at index " + index);
}
// prints
// [apple, banana, cantaloupe, grapes, orange, pear, cherry]
// Item "orange" found at index 4
متد indexOf() زمانی که برنامه موردی را پیدا نمی کند -1 را برمی گرداند:
index = alist.indexOf("grape");
if (index < 0) {
System.out.println("Item \"grape\" not found");
} else {
System.out.println("Item \"grape\" found at index " + index);
}
// prints
// Item "grape" not found
تکرار بیش از یک ArrayList
رایج ترین استفاده از ArrayList تکرار روی عناصر است. شما می توانید این کار را به روش های مختلفی انجام دهید. کد زیر حاوی یک حلقه for است که روی یک ArrayList تکرار می شود و هر آیتم را در کنسول چاپ می کند:
for (String fruit : alist) {
System.out.println("Found fruit \"" + fruit + "\"");
}
// prints
// Found fruit "apple"
// Found fruit "banana"
// Found fruit "cantaloupe"
// Found fruit "grapes"
// Found fruit "orange"
// Found fruit "pear"
// Found fruit "cherry"
قبل از حلقه for بهبود یافته جاوا، توسعه دهندگان بر روی آیتم های موجود در ArrayList با یک تکرار کننده تکرار می کردند. یک تکرار کننده همچنین می تواند عناصر را در طول فرآیند تکرار حذف کند، همانطور که مثال زیر نشان می دهد. توجه داشته باشید که کد زیر یک کپی از ArrayList ایجاد می کند و روی آن کار می کند.
ArrayList<String> blist = new ArrayList<String>(alist);
for (Iterator<String> iter = blist.iterator() ; iter.hasNext() ; ) {
String fruit = iter.next();
if (fruit.startsWith("c")) {
iter.remove();
} else {
System.out.println("Keeping \"" + fruit + "\"");
}
}
// prints
// Keeping "apple"
// Keeping "banana"
// Keeping "grapes"
// Keeping "orange"
// Keeping "pear"
جایگزینی اقلام
متد set() به شما امکان می دهد یک آیتم موجود در یک ArrayList را جایگزین کنید. این روش دو آرگومان می گیرد. موقعیت فهرست موردی که می خواهید جایگزین کنید و مورد جدید.
alist.set(5, "pineapple");
System.out.println(alist);
// prints
// [apple, banana, cantaloupe, grapes, orange, pineapple, cherry]
حذف موارد
اگر موقعیت فهرست آیتمی را که میخواهید از لیست حذف کنید میدانید، میتوانید از متد remove() برای رسیدن به این هدف استفاده کنید. متد remove() یک موقعیت شاخص یا یک آیتم را به عنوان آرگومان می گیرد.
String fruit = alist.remove(2);
System.out.println("Removed element at 2: " + fruit);
// prints
// Removed element at 2: cantaloupe
اگر برنامه آیتم مشخص شده را بیابد و حذف کند، کد زیر true را برمی گرداند.
fruit = "grapes";
System.out.println("Remove " +fruit+ " from the list? " + alist.remove(fruit));
// prints
// Remove grapes from the list? true
ارزش انتخاب ساختار داده مناسب
دانستن نحوه ایجاد و دستکاری ArrayLists در جاوا یک مهارت ارزشمند است. ArrayList یکی از چندین ساختار داده است که می توانید برای ذخیره داده ها از آن استفاده کنید. بنابراین، ممکن است همیشه بهترین ساختار داده برای آنچه که می خواهید انجام دهید، نباشد.
به عنوان مثال، اگر می خواهید داده های خود را با یک کلید منحصر به فرد ذخیره کنید و ترتیب ذخیره سازی مهم نیست، HashMap گزینه بهتری نسبت به ArrayList است. بنابراین، دانستن نحوه استفاده از طیف گسترده ای از ساختارهای داده یک دارایی است.