آموزش آرایه در جاوا — به زبان ساده
آرایه در جاوا مجموعهای از عناصر داده است که در حافظه به صورت به هم پیوسته ذخیره میشوند. این سادهترین ساختار داده است که در آن میتوان به هر عضو داده مستقیماً تنها با استفاده از شماره اندیس (نمایه | Index) آن دسترسی داشت. در تمام زبانهای برنامه نویسی آرایه یکی از عناصر بسیار مهم به حساب میآید. در مقاله «آموزش آرایه در جاوا» به بررسی آرایهها در زبان برنامه نویسی بسیار کاربردی و محبوب جاوا (Java) پرداخته شده است.
آرایه در جاوا چیست ؟
آرایهها در برنامه نویسی جاوا اشیایی هستند که چندین متغیر از یک نوع (Type) را در حافظه ذخیره میکنند. آرایه میتواند انواع مختلف داده را در خود جای دهد. در واقع نوع مجموعهها (Collection Types) در برنامه نویسی جاوا که بخشی از بسته «java.util» هستند از آرایهها به صورت داخلی در عملکرد خود استفاده میکنند. به دلیل اینکه آرایهها در جاوا شی به حساب میآیند، در زمان اجرا (Runtime) ایجاد میشوند.
آرایه در جاوا مجموعهای از متغیرها است که میتوان با استفاده از یک نام متغیر منفرد همراه با یک اندیس به آنها ارجاع داد. هر آیتم آرایه، یک عنصر (Element) در آرایه است و نوع داده تمام عناصر آرایه نیز باید یکسان باشند. برای مثال، یک آرایه از نوع «int» حاوی مقادیر عدد صحیح است و یک آرایه از نوع «String» میتواند شامل رشتهها شود. در بخش بعدی به بررسی ویژگیهای آرایه پرداخته شده است.
ویژگیهای آرایه
در این بخش از آموزش آرایه در جاوا برخی از ویژگیهای مهم آرایه در این زبان برنامه نویسی فهرست شدهاند:
- آرایهها در جاوا شی محسوب میشوند.
- در جاوا، آرایهها میتوانند متغیرهای مرجع (Reference Variables) اشیا را در خود نگه دارند.
- آرایهها در زبان جاوا حین زمان اجرا ایجاد میشوند.
- آرایهها پویا هستند و روی بلوکهای آزاد حافظه (هرم | Heap) ایجاد میشوند.
- طول آرایه ثابت است.
در بخش بعدی مقاله «آموزش آرایه در جاوا » به تعریف انواع گوناگون آرایهها پرداخته شده است.
تعریف آرایه در جاوا
ابتدا در این بخش تعریف انواع ابتدایی آرایهها مورد بررسی قرار گرفته است. برای تعریف آرایهها در جاوا، ابتدا نوع آرایه و سپس نام آن آرایه (نامی برای شناسایی آرایه) تعیین و در انتها نیز یک کروشه در مقابل آن قرار داده میشود.
الگوی نوشتن آرایه در جاوا به صورت زیر است:
1dataType[] arrayRefVar = {value0, value1, ..., valuek};
در ادامه به بررسی مثالهای آرایه در جاوا برای یادگیری بهتر تعریف و نوشتن آرایهها در جاوا پرداخته شده است.
مثال اول آرایه در جاوا : تعریف آرایه از نوع صحیح در جاوا
مثال زیر تعریف آرایهای را نشان میدهد که نوع آن عدد صحیح یعنی «int» است.
1int aiMyArray[];
گزاره فوق یک آرایه مرجع در پشته حافظه ایجاد میکند. حال در ادامه مثال دیگری در خصوص تعریف آرایه در جاوا ارائه شده است.
مثال دوم آرایه در جاوا : تعریف آرایه از نوع Double و تعیین تعداد اعضای آرایه در جاوا
در خط کد زیر، یک متغیر آرایه به نام «myList» تعریف شده است. این متغیر آرایه، دارای 10 عضو از نوع Double است و با تخصیص اندیس مرجع مربوطه میتوان به داده مورد نظر دسترسی پیدا کرد.
1double[] myList = new double[10];
تصویر زیر آرایه «myList» را نشان میدهد. در اینجا، «myList» ده مقدار از نوع Double دارد و اندیسها از 0 تا 9 هستند.
روش دیگری برای تعریف آرایه در جاوا
هر دو گزاره زیر برای تعریف آرایه در جاوا صحیح و یکسان هستند و میتوان از هر کدام از آنها استفاده کرد.
1int []aiMyArray;
2int aiMyArray[];
قطعه کد زیر یک آرایه با ۶ درایه در هرم حافظه میسازد. برای ایجاد شی در آرایه، اندازه فضای اختصاص داده شده به شی باید برای ماشین مجازی (Java Virtual Machine | JVM) جاوا تعیین شده باشد. بنابراین، اندازه آرایه باید بعد از کلمه کلیدی «new» مشخص شود:
1int aiFirstArray[] = new int[6];
تمام عناصر (درایههای) آرایهای که روی هرم ایجاد شدهاند، با عدد صفر مقداردهی اولیه میشوند. اگر به جای مقادیر پیش فرض به مقادیر دیگری نیاز باشد، مقداردهی مانند گزاره زیر انجام میگیرد.
1int aiFirstArray[]={1,2,3,4,5,6};
گزاره فوق آرایه را تعریف، ساخته و مقداردهی اولیه میکند. در این بخش به چگونگی تعریف یک آرایه به سادهترین نحو پرداخته شد.
پردازش آرایه در جاوا
هنگام پردازش عناصر آرایه، اغلب از حلقه «for» یا حلقه «foreach» استفاده میشود، زیرا همه عناصر یک آرایه از یک نوع هستند و اندازه آرایه مشخص است.
برای مثال، کدهای زیر به طور کامل به روش ایجاد، مقداردهی اولیه و پردازش آرایه به وسیله حلقه for پرداخته شده است.
1public class TestArray {
2
3 public static void main(String[] args) {
4 double[] myList = {1.9, 2.9, 3.4, 3.5};
5
6 // Print all the array elements
7 for (int i = 0; i < myList.length; i++) {
8 System.out.println(myList[i] + " ");
9 }
10
11 // Summing all elements
12 double total = 0;
13 for (int i = 0; i < myList.length; i++) {
14 total += myList[i];
15 }
16 System.out.println("Total is " + total);
17
18 // Finding the largest element
19 double max = myList[0];
20 for (int i = 1; i < myList.length; i++) {
21 if (myList[i] > max) max = myList[i];
22 }
23 System.out.println("Max is " + max);
24 }
25}
خروجی این کد به صورت زیر است:
1.9 2.9 3.4 3.5 Total is 11.7 Max is 3.5
در JDK1.5 یک حلقه for جدید به نام حلقه foreach یا حلقه تقویت شده معرفی شده است که این امکان را میدهد تا بدون استفاده از متغیر شاخص، کل آرایه به صورت متوالی پیمایش شود.
JDK1.5 یا بسته توسعه جاوا یکی از نسخههای قدیمی برنامه نویسی جاوا به حساب میآید که در سال ۲۰۰۴ منتشر شده است. در کدهای زیر، هر یک از عضوهای آرایه myList به ترتیب در خروجی نمایش داده میشوند.
1public class TestArray {
2
3 public static void main(String[] args) {
4 double[] myList = {1.9, 2.9, 3.4, 3.5};
5
6 // Print all the array elements
7 for (double element: myList) {
8 System.out.println(element);
9 }
10 }
11}
خروجی قطعه کد بالا به صورت زیر است:
1.9 2.9 3.4 3.5
در این بخش پردازش آرایه در جاوا همراه با مثال مورد بررسی قرار گرفت. بخش بعدی مقاله «آرایه در جاوا» به روش استفاده از آرایه در جاوا اختصاص داده شده است.
استفاده از آرایه در جاوا
با کمک اندیسها میتوان به راحتی به عناصر آرایه دسترسی پیدا کرد. برای مثال، aiFirstArray[0] به مقدار اولین عنصر و aiFirstArray[1] نیز به مقدار دومین عنصر آرایه aiFirstArray اشاره دارد. میتوان گزاره aiFirstArray[n-1] را نیز مورد استفاده قرار داد که در این صورت «n» بیانگر اندازه آرایه است. دسترسی به آرایه با اندیس بزرگتر یا برابر با اندازه خود آرایه، منجر به بروز استثنای NullPointer Exception میشود و در اجرای برنامه مشکل به وجود خواهد آمد.
NullPointer Exception یک استثنا در برنامه نویسی جاوا است، که در زمان اجرا و حین اجرای برنامه رخ میدهد. در برنامه نویسی جاوا، یک مقدار تهی ویژه میتواند به یک شی مرجع اختصاص داده شود. NullPointer Exception زمانی اتفاق میافتد که برنامه سعی میکند از یک شی مرجع با مقدار هیچ (Null) استفاده کند. در بخش بعدی به این سوال پاسخ داده خواهد شد که چطور اندازه آرایه بهدست میآید؟
اندازه آرایه چطور بهدست میآید ؟
برای بهدست آوردن اندازه آرایه در جاوا از متد length به صورت arrayName.length استفاده میشود. برای درک بهتر چگونگی به دست آوردن اندازه آرایه در جاوا و استفاده از متد «length»، مثال دیگری در ادامه ارائه شده است.
مثال ۳: در مثال زیر عناصر آرایه با مقادیر (۱،۲،۳،۴،۵،۶) به وسیله یک حلقه «for» مقداردهی اولیه شدهاند. ابتدا آرایه aiFirstArray با اندازه ۶ عنصر تعریف شده است و سپس، اعداد از اندیس صفر تا پنج با اضافه کردن عدد یک به مقدار «i» در حلقه وارد آرایه شدهاند.
1class ArrayInitializing{
2 public static void main(String args[]){
3 int aiFirstArray[] = new int[6];
4 for(int i=0;i<aiFirstArray.length;i++){
5 aiFirstArray[i]=i+1;
6 }
7 for(int i=0;i<aiFirstArray.length;i++){
8 System.out.println(aiFirstArray[i]);
9 }
10 }
11}
زبالهروبی آرایهها
برای آمادهسازی یک شی آرایه جهت زبالهروبی در جاوا، آرایه مورد نظر باید به هیچ یا همان null اشاره داشته باشد. بنابراین null کردن مقدار یک آرایه در جاوا به صورت زیر انجام میشود:
1aiFirstArray=null;
گزاره فوق آرایه را وادار میکند تا به null اشاره داشته باشد. یعنی، شی آرایهای که در هرم حافظه قرار داشته است، برای زبالهروبی (جمعآوری زباله) آماده است. پس از اشاره آرایه به null، ارجاع به آن آرایه منجر به رخداد استثنای NullPointer خواهد شد و در اجرای برنامه مشکل ایجاد میشود.
- مقالههای پیشنهادی:
ارجاع آرایه به متد در جاوا
همانطور که میتوان مقادیر نوع داده اولیه (Primitive) را به متدها (Method) ارسال کرد، امکان ارجاع آرایهها به متدها نیز وجود دارد. با استفاده از متدها میتوان عملیات و محاسبات مختلفی را بر اساس آرایهها اجرا کرد.
به عنوان مثال، متُد زیر عناصر را در یک آرایه int نمایش میدهد:
1public static void printArray(int[] array) {
2 for (int i = 0; i < array.length; i++) {
3 System.out.print(array[i] + " ");
4 }
5}
میتوان این متد را با ارجاع یک آرایه فراخوانی کرد. به عنوان مثال، گزاره زیر متد «printArray» را برای نمایش 3، 1، 2، 6، 4 و 2 فراخوانی میکند.
1printArray(new int[]{3, 1, 2, 6, 4, 2});
خروجی متد به صورت آرایه در جاوا
خروجی یک متد نیز میتواند در جاوا به صورت آرایه باشد. یعنی مقدار بازگشتی یک متد ممکن است از نوع آرایه باشد.
برای مثال، در کدهای زیر متد reverse به گونهای تعریف شده است که خروجی آن معکوس آرایه ورودی خواهد بود. یعنی این متد یک آرایه را به عنوان خروجی بازمیگرداند.
1public static int[] reverse(int[] list) {
2 int[] result = new int[list.length];
3
4 for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
5 result[j] = list[i];
6 }
7 return result;
8}
کلاس «java.util.Arrays» شامل متدهای ثابت مختلفی برای مرتبسازی (Sorting)، جستوجوی آرایهها، مقایسه آرایهها و پر کردن عناصر آرایه است. این روشها برای همه انواع اولیه با بار اضافه (overloaded) استفاده میشوند. در ادامه بحث آموزش آرایه در جاوا ، به بررسی آرایههای چند بعدی پرداخته شده است.
- مقاله پیشنهادی: نمونه کد جاوا — نمونه کدهای کاربردی برای برنامه نویسان جاوا.
آرایههای چند بعدی در جاوا
آرایههای چند بعدی (Multidimensional Arrays)، آرایههایی از آرایهها هستند که هر عضو آرایه، شی مرجع آرایه دیگر را نگه میدارد.
به این آرایهها، آرایه دندانهدار (Jagged) نیز گفته میشود. در ادامه مثالی در این خصوص ارائه شده است.
مثال ۴:
قطعه کد زیر آرایهای میسازد که دو عدد از عناصر آن به null (هیچ) اشاره میکنند. برای تعریف این نوع از آرایهها، نیازی به ذکر چیزی در کروشه دوم نیست، زیرا آرایههای تکی را میتوان بعداً ایجاد کرد.
1int aiMdArray[][]=new int [2][];
دستور زیر اولین عضو را در یک آرایه جدید دو عضوی مقداردهی اولیه میکند:
1aiMdArray[0]=new int [2];
دستور زیر اولین عضو اولین آرایه را با عدد ۱۰ مقداردهی اولیه میکند:
1aiMdArray[0][0]=10;
آرایهای از ارجاعات در جاوا
علاوه بر نوعهای اولیه آرایهها در جاوا میتوانند ارجاعات اشیا را هم در خود ذخیره کنند. برای توضیح بیشتر «آرایهای از اشیا» مثال دیگری در ادامه ارائه شده است.
مثال ۵: در مثال زیر، یک کلاس با نام Employee (کارمند) ایجاد شده است که زیر کلاسی به نام Trainee (کارآموز) دارد.
1class Employee{}
2class Trainee extends Employee{}
در ادامه گزاره زیر در نظر گرفته میشود:
1Employee emp[]=new Employee[3];
گزاره فوق آرایهای از سه عضو ایجاد میکند که دارای سه مرجع برای Employee به صورت emp[1] ،emp[0] و emp[2] است. در این بخش باید توجه کرد که اشیا کارمندان هنوز ایجاد نشدهاند و ارجاع به اشیا کارمند منجر به بروز استثنا در زمان اجرا (Runtime Exception) میشود. در کدهای زیر، اشیا کارمندان به وسیله یک حلقه «for» مقداردهی اولیه میشوند.
1for(int i=0;i<emp.length;i++){
2emp[i]=new Employee();
3}
با توجه به اینکه، ارجاع کلاس واحد میتواند به اشیا کلاس فرزند نیز اشاره کند، کدهای زیر قابل توجیه هستند:
1for(int i=0;i<emp.length;i++){
2emp[i]=new Trainee();
3}
اکنون یک واسط (Interface) با نام Salary در نظر گرفته میشود که توسط کلاس Employee پیاده سازی میشود.
1interface Salary{}
2class Employee implements Salary{}
رابط را نمیتوان نمونه سازی کرد، اما از مرجع میتوان برای اشاره به اشیا کلاسهایی استفاده کرد که آن را پیاده سازی میکنند. به این ترتیب، کدهای زیر هم قابل توجیه هستند:
1Salary sal[]=new Salary[2];
2sal[0]=new Employee();
3sal[1]=new Employee();
بنابراین در مقاله «آموزش آرایه در جاوا» سعی شد آرایههای جاوا به طور کامل بررسی شوند و به مباحث پیرامون آنها از جمله تعریف، ویژگیها، پردازش و آرایههای چند بعدی در جاوا نیز پرداخته شد.
جمعبندی
استفاده از زبان برنامه نویسی شی گرای جاوا در دنیای علوم کامپیوتر به ویژه در توسعه وب اپلیکیشنهای تجاری بسیار پر کاربرد است. از این رو، یادگیری مفاهیم مختلف برنامه نویسی جاوا بسیار اهمیت دارد. یکی از مفاهیم مهم برنامه نویسی در اکثر زبانها مفهوم آرایه است.
در این مقاله، آموزش آرایه در جاوا ارائه شد؛ ابتدا به چیستی و تعریف آرایه در برنامه نویسی جاوا و بررسی ویژگیهای آرایه پرداخته شده است. سپس، پردازش آرایه، استفاده از آرایه، به دست آوردن اندازه آرایه، ارتباط آرایه و متدها و در نهایت آرایههای چند بعدی به همراه مثالهایی با کدهای جاوا مورد بررسی قرار گرفتند. امید است این مقاله مفید واقع شود.
درود بر شما