آرایه (Array) شی ظرفی است که تعداد ثابتی مقدار از یک نوع واحد را نگه میدارد. طول آرایه هنگام ایجاد آن تعیین میشود و پس از ایجاد ثابت است. شما قبلاً نمونهای از آرایهها را در متد main برنامه «Hello World!» دیدهاید. این بخش آرایهها را با جزئیات بیشتری بحث میکند.
هر عنصر در آرایه یک عنصر (Element) نامیده میشود و هر عنصر از طریق شاخص (Index) عددی خود قابل دسترسی است. شمارهگذاری از ۰ شروع میشود. عنصر ششم مثلاً در شاخص ۵ قابل دسترسی است.
برنامه شما میتواند آرایهای به نام anArray با خط کد زیر اعلام کند:
int[] anArray; // اعلام متغیر آرایه
اعلام آرایه دو بخش دارد: نوع آرایه و نام آرایه. نوع آرایه به صورت type[] نوشته میشود، که در آن type نوع داده اجزای داخلی است؛ براکتها نمادهای خاصی هستند که نشان میدهند این متغیر آرایه نگه میدارد. اندازه آرایه بخشی از نوع آن نیست (به همین دلیل براکتها خالی هستند). نام آرایه میتواند هر چیزی باشد، مشروط بر اینکه از قوانین و قراردادهای بحثشده در بخش کلاسها پیروی کند. مشابه متغیرهای انواع دیگر، اعلام واقعاً آرایهای ایجاد نمیکند؛ فقط به کامپایلر میگوید این متغیر آرایهای از نوع مشخصشده نگه خواهد داشت.
به همین ترتیب، میتوانید آرایههایی از انواع دیگر اعلام کنید:
double[] anArray; // آرایه double
String[] names; // آرایه String
Person[] people; // آرایه Person
همچنین میتوانید براکتها را بعد از نام آرایه قرار دهید، اگرچه این نحو توصیه نمیشود. قرارداد این شکل را توصیه نمیکند؛ براکتها نوع آرایه را مشخص میکنند و باید همراه با تعیین نوع ظاهر شوند.
یک راه ایجاد آرایه با عملگر new است. دستور زیر آرایهای با حافظه کافی برای ۱۰ عنصر عددی تخصیص میدهد و آن را به متغیر anArray اختصاص میدهد:
anArray = new int[10]; // آرایهای با ۱۰ عنصر
اگر این دستور وجود نداشته باشد، خطای کامپایلر دریافت میکنید.
چند خط بعد مقادیر را به هر عنصر آرایه اختصاص میدهند:
anArray[0] = 100; // اولین عنصر
anArray[1] = 200; // دومین عنصر
anArray[2] = 300; // سومین عنصر
هر عنصر با شاخص عددی خود قابل دسترسی است:
System.out.println("Element 1 at index 0: " + anArray[0]);
System.out.println("Element 2 at index 1: " + anArray[1]);
System.out.println("Element 3 at index 2: " + anArray[2]);
یا از نحو میانبر برای ایجاد و مقداردهی اولیه استفاده کنید:
int[] anArray = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };
طول آرایه توسط تعداد مقادیر ارائهشده بین آکولادها و جدا شده با کاما تعیین میشود.
چون آرایه میتواند هر مرجعی را نگه دارد و آرایه خودش یک مرجع است، میتوانید بهراحتی آرایههایی از آرایهها ایجاد کنید. آرایههای آرایهای به عنوان آرایه چندبعدی هم شناخته میشوند. میتوانید آنها را با دو یا چند مجموعه براکت اعلام کنید، مانند String[][] names. هر عنصر باید با تعداد متناسبی مقادیر شاخص قابل دسترسی باشد.
در زبان جاوا، آرایه چندبعدی آرایهای است که اجزای خودش آرایه هستند. این با آرایههای C یا Fortran متفاوت است، جایی که آرایه دوبعدی منطقه پیوسته حافظهای است که مستقیماً با اشارهگر دسترسی داده میشود. در جاوا آرایه منطقه پیوسته حافظهای است، اما آرایه دوبعدی یک آرایه ارجاعات است و خودش منطقه پیوسته حافظهای نیست.
یک نتیجه این است که سطرها مجاز به تغییر طول هستند:
String[][] multidimensionalArray = new String[3][];
multidimensionalArray[0] = new String[1]; // سطر اول: ۱ عنصر
multidimensionalArray[1] = new String[2]; // سطر دوم: ۲ عنصر
multidimensionalArray[2] = new String[3]; // سطر سوم: ۳ عنصر
این آرایهها گاهی آرایههای نامنظم یا Jagged Arrays نامیده میشوند.
میتوانید از ویژگی داخلی length تعریفشده روی هر آرایه برای تعیین اندازه آن استفاده کنید. کد زیر اندازه آرایه را چاپ میکند:
System.out.println(anArray.length); // 10
این مخصوصاً برای آرایههای آرایهای مفید است، که در آن هر آرایه میتواند طول متفاوتی داشته باشد. کد شما نباید فرض کند تمام آرایهها طول یکسانی دارند و باید به ویژگی length تکیه کند.
کلاس System متد arraycopy() دارد که میتوانید برای کپی کارآمد داده از یک آرایه به آرایه دیگر استفاده کنید:
System.arraycopy(sourceArray, srcPos, destArray, destPos, length);
دو آرگومان Object آرایه مبدأ و مقصد را مشخص میکنند. سه آرگومان int شاخص شروع در آرایه مبدأ، شاخص شروع در آرایه مقصد و تعداد عناصر کپیشده را مشخص میکنند.
مثال: اعلان آرایهای از عناصر String و استفاده از System.arraycopy() برای کپی یک زیردنباله از اجزای آرایه به آرایه دوم:
String[] coffees = {"Latte", "Mocha", "Cappuccino", "Drip", "Espresso", "Cold Brew", "Americano", "Macchiato", "Affogato", "Lungo"};
String[] subset = new String[4];
System.arraycopy(coffees, 3, subset, 0, 4);
// subset = ["Drip", "Espresso", "Cold Brew", "Americano"]
آرایهها مفهومی قدرتمند و مفید در برنامهنویسی هستند. Java SE متدهایی برای انجام متداولترین عملیات مرتبط با آرایهها ارائه میدهد.
مثال قبلی از متد arraycopy() کلاس System به جای پیمایش دستی عناصر آرایه مبدأ و قرار دادن هر کدام در آرایه مقصد استفاده میکند. این کار در پسزمینه انجام میشود و به توسعهدهنده اجازه میدهد فقط با یک خط کد متد را فراخوانی کند.
سایر وظایف متداول مانند کپی، مرتبسازی و جستجوی آرایهها توسط متدهای کلاس Arrays پیادهسازی شدهاند. مثلاً مثال قبلی را میتوان با استفاده از متد Arrays.copyOfRange() تغییر داد. تفاوت این است که استفاده از Arrays.copyOfRange() نیازی به ایجاد آرایه مقصد قبل از فراخوانی متد ندارد، چون آرایه مقصد توسط متد برگردانده میشود.
سایر عملیات مفید کلاس Arrays:
Arrays.binarySearch(array, value) — جستجوی مقدار خاص و دریافت شاخصArrays.equals(array1, array2) — بررسی برابری دو آرایهArrays.fill(array, value) — پر کردن آرایه با مقدار خاصArrays.sort(array) — مرتبسازی صعودیArrays.parallelSort(array) — مرتبسازی موازی (Java SE 8+)Arrays.stream(array) — ایجاد Stream از آرایهArrays.toString(array) — تبدیل آرایه به رشته با فرمت [elem1, elem2, ...]String[] coffees = {"Latte", "Mocha", "Espresso"};
System.out.println(Arrays.toString(coffees));
// خروجی: [Latte, Mocha, Espresso]
میتوانید از الگوی for-each برای بازدید از عناصر آرایه استفاده کنید:
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.println(num);
}
میتوانید از انواع داده دیگر برای آرایهها استفاده کنید. مثالی با آرایه double:
double[] prices = {9.99, 19.99, 29.99};
for (double price : prices) {
System.out.printf("$%.2f%n", price);
}
آرایههای انواع مرجع هم امکانپذیر هستند:
String[] names = {"Alice", "Bob", "Charlie"};
for (String name : names) {
System.out.println(name);
}
میتوانید محاسباتی روی آرایهها انجام دهید:
int[] values = {5, 10, 15, 20, 25};
int max = values[0];
for (int value : values) {
if (value > max) max = value;
}
System.out.println("Max: " + max); // Max: 25
میتوانید محتوای یک آرایه را به آرایه جدیدی کپی کنید — حتی اگر روشی خستهکننده باشد:
int[] source = {1, 2, 3, 4, 5};
int[] dest = new int[source.length];
for (int i = 0; i < source.length; i++) {
dest[i] = source[i];
}
همچنین میتوانید از System.arraycopy() استفاده کنید. در این حالت باید خودتان آرایه مقصد را ایجاد کنید.
یا از Arrays.copyOfRange() استفاده کنید که آرایه مقصد را برای شما ایجاد میکند:
String[] copy = Arrays.copyOfRange(coffees, 0, 4);
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/