آرایه در جاوا برای ذخیره و نگهداری مجموعهای از اطلاعات با نوع دادهای یکسان استفاده میشود. با استفاده از آرایه میتوانیم به جای تعریف چندین متغیر و ذخیره مقادیر در آنها، با تعریف یک متغیر، چندین مقدار از یک Data Type را نگهداری کنیم. در این مقاله آرایه (Array) را تعریف کرده با نحوه استفاده و کاربردهای آن آشنا خواهیم شد. در انتها نیز چند ترفند در کار با آرایه در جاوا را خواهیم آموخت.
آرایه (Array) یک ساختمان داده است که از چند عنصر با نوع دادهای خاص تشکیل شده است.
هر کدام از این عناصر در آرایه به کمک یک عدد شناسایی میشوند. این عدد در حقیقت مشخص کننده جایگاه آن عنصر در آرایه است.
به شماره خانه در آرایه در اصطلاح برنامه نویسی ایندکس (index) یا اَندیس گفته میشود.
شماره ایندکس از 0 شروع شده و تا اندازه آرایه یکی کمتر ادامه پیدا میکند.
یکی از اصلیترین معایب آرایه ثابت بودن اندازه آن است! به این معنی که در طول اجرای برنامه، اجازه افزایش ظرفیت یک آرایه را نخواهیم داشت.
البته این مشکل به کمک ساختمان دادههای دیگر رفع شده؛ اما خود Array به تنهایی چنین امکانی را ندارد.
در کل دو نوع آرایه وجود دارد.
اگر آرایه ما به صورت خطی تعریف شده باشد، یک آرایه تک بعدی داریم.
اما گاهی ممکن است دو یا چند آرایه را به صورت تو در تو استفاده کنیم. در این صورت یک آرایه چند بعدی خواهیم داشت.
برای درک بهتر، ماتریس یک آرایه دو بعدی و مکعب یک آرایه چند بعدی است.
تعریف آرایه در زبان برنامه نویسی جاوا بسیار مشابه تعریف یک متغیر ساده است.
همانطور که میدانید برای تعریف یک متغیر در جاوا، ابتدا نوع دادهای (Data Type) متغیر و سپس نام متغیر را مشخص میکنیم.
در صورتی که بخواهیم عملیات مقداردهی اولیه نیز انجام شود، با قرار دادن علامت انتساب (=
) مقدار اولیه آنرا مشخص خواهیم کرد.
برای تعریف آرایه نیز ابتدا باید Data Type مقادیر داخل آنرا مشخص کنیم. سپس یک علامت []
بعد از نوع دادهای قرار داده و اسم متغیر آرایه را مشخص میکنیم.
پس از قرار دادن علامت انتساب، با نوشتن کلمه کلیدی new
اقدام به تعریف نوع دادهای در خانههای آرایه میکنیم. سپس Data Type مورد نظر را دوباره نوشته و تعداد خانههای آرایه (ظرفیت) را با عدد درون []
مشخص خواهیم کرد.
به کمک قطعه کد زیر، یک آرایه شش تایی از اعداد صحیح (integer) ساختهایم.
int[] myArray = new int[6]; |
گاهی نیاز داریم در هنگام تعریف آرایه، به تمام ایندکسهای آن مقادیر مرتبطشان را انتساب دهیم.
برای این کار بعد از علامت انتساب، میتوان مقادیر مورد نظر را درون {}
وارد کرد. هر مقدار با , از یکدیگر جدا میشوند.
int[] myArray = { 3, 7, 6, 4, 2, 9 } |
با مشخص کردن شماره خانه در آرایه، میتوانیم مقدار ذخیره شده در آن را خوانده یا تغییر دهیم.
برای مشخص کردن ایندکس آرایه، پس از آوردن نام آرایه، ایندکس را در []
قرار میدهیم.
int[] myArray = { 3, 7, 6, 4, 2, 9 } // myArray[0] --> 3 // myArray[4] --> 2 // myArray[6] --> XXX (Invalid Index) |
توجه کنید که اگر خانهای خارج از محدوده اندازه آرایه فراخوانی شود، با خطای IndexOutOfBound مواجه خواهید شد!
تغییر مقادیر یک آرایه با استفاده از علامت انتساب (=
) به راحتی قابل انجام است.
ابتدا اندیس آرایه را مشخص کرده و سپس آنرا مقداردهی میکنیم.
در قطعه کد زیر، مقدار موجود در خانه چهارم (ایندکس 3) را به 0 تغییر دادهایم.
myArray[3] = 0; |
همانطور که در قسمت قبل یاد گرفتیم، با مقدار دهی ایندکس، میتوان به تمام خانههای آرایه دسترسی داشت.
بنابراین اگر در یک حلقه، مقدار ایندکس را تغییر دهیم، میتوانیم روی تمام مقادیر آرایه عملیاتی را انجام دهیم.
در قطعه کد زیر با استفاده از یک حلقه for
، به تمام مقادیر موجود در آرایه دسترسی پیدا کرده و آنها را در کنسول چاپ میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class TestArrayClass { public static void main(String[] args) { int[] myArray = { 5, 3, 7, 4 }; for ( int i = 0; i < 4; i++ ) { System.out.print( myArray[i] + " "); } } } // output: 5 3 7 4 |
مشابه مورد قبلی، اگر یک متغیر برای شمارش ایندکس در حلقه while
خود در نظر بگیریم، میتوان به راحتی در آرایه حرکت کرد.
در JDK 1.5
و بعد از آن یک حلقه جدید مشابه for
معرفی شد به نام foreach
. حلقه foreach
به ما اجازه پیمایش یک آرایه را بدون استفاده از متغیری به عنوان ایندکس میدهد.
استفاده از این نوع حلقه بسیار ساده و راحت است.
فرض کنید مشابه قبل، میخواهیم تمام مقادیر یک آرایه را در خروجی چاپ کنیم.
for (int itm: myArray) { System.out.print(itm + " "); } |
نحوه کار این حلقه به این صورت است که از ابتدا تا انتهای آرایه، در هر دُور از حلقه، یک مقدار را درون متغیر itm
قرار داده و حلقه را اجرا میکند.
آرایه در java ویژگیها و متدهایی دارد که به کمک آنها میتوان اطلاعاتی در مورد آرایه به دست آورد.
در ادامه چند نمونهی پر کاربرد آنها را معرفی میکنیم.
با صدا زدن ویژگی length
روی آرایه، یک مقدار عددی که اندازه آرایه است را خواهیم داشت.
1 2 3 4 5 6 7 8 9 10 11 | public class TestArrayClass { public static void main(String[] args) { int[] myArray = { 5, 3, 7, 4 }; System.out.print( "Array Size: " + myArray.length ); } } // output: // Array Size: 4 |
دو مورد بعدی با افزودن کتابخانه java.util.Arrays
به برنامه قابل اجرا خواهند بود.
پس ابتدا این کتابخانه را به ابتدای برنامه خود اضافه میکنیم.
import java.util.Arrays; |
گاهی برای دیباگ برنامه، لازم است مقادیر موجود در یک آرایه را در کنسول چاپ کنیم.
اگر آرایه را به عنوان ورودی متد System.out.print()
بدهیم، صرفاً آدرس (رفرنس) ذخیره سازی شئ آنرا خواهیم داشت!
1 2 3 4 5 6 | int[] myArray = { 5, 3, 7, 4 }; System.out.print( myArray ); // output: // [I@6d06d69c |
تابعی در کلاس Arrays وجود دارد که یک آرایه را برای چاپ مقادیرش آماده سازی میکند. خروجی این تابع یک رشته String است.
ورودی متد Arrays.toString()
یک آرایه است.
1 2 3 4 5 6 | int[] myArray = { 5, 3, 7, 4 }; System.out.print( Arrays.toString(myArray) ); // output: // [5, 3, 7, 4] |
بارها شده که بخواهیم مقادیر یک آرایه را به صورت صعودی مرتب کنیم.
برای این کار یک متد در کتابخانه Arrays
به نام sort()
وجود دارد. این تابع یک آرایه به عنوان ورودی از ما گرفته و مقادیر آنرا به صورت صعودی مرتب میکند.
توجه داشته باشید که تغییرات بر روی آرایه اصلی اعمال شده و آرایه نامرتب را از دست خواهیم داد.
int[] myArray = { 5, 3, 7, 4 }; Arrays.sort(myArray); // myArray = [3, 4, 5, 7] |
اگر بخواهیم متدهایی را برای کار با آرایه ها تعریف کنیم، نیاز داریم ورودی یا خروجی متد به صورت آرایه باشد.
انجام این کار بسیار ساده است و در ادامه نحوه پیاده سازی را خواهیم دید.
فرض کنید میخواهیم متدی برای محاسبه میانگین مقادیر یک آرایه بنویسیم.
به این صورت که هر آرایهای به متد ما داده شد، به عنوان خروجی، یک مقدار میانگین به صورت double
به ما بدهد.
تعریف چنین متدی به صورت زیر خواهد بود.
1 2 3 4 5 6 7 | public double average(int[] numbers){ int total = 0; for (int i = 0; i < numbers.length; i++) { total += numbers[i]; } return total/numbers.length; } |
حال فرض کنید متد سادهای داریم که مقادیر موجود در هر خانه از آرایه را به توان 2 میرساند. در انتها همان آرایه را به عنوان خروجی به ما خواهد داد.
1 2 3 4 5 6 | public int[] power2(int[] numbers){ for (int i = 0; i < numbers.length; i++) { numbers[i] = numbers[i] * numbers[i]; } return numbers; } |
تعریف آرایههای چند بعدی تقریباً شبیه هم هستند. ما در اینجا یک آرایه دو بعدی (ماتریس) ایجاد کرده و نحوه کار با آنرا بررسی میکنیم.
برای تعریف آرایه دو بعدی، هر عنصرِ آرایه میبایست دو اندیسِ جداگانه بگیرد.
اگر آرایه دو بعدی را شبیه یک ماتریس (جدولِ تخت) در نظر بگیریم، اندیس اول مشخص کننده سطر و اندیس دوم برای ستون خواهد بود. (همان x
و y
)
در زیر یک ماتریس 3 در 3 ایجاد کردهایم.
int[][] testMatrix = new int[3][3]; |
واضح است که برای دسترسی به عناصر یک ماتریس و یا تغییر مقادیر آنها باید هر دو اندیس را مشخص کنیم.
برای مثال، با قطعه کد زیر، تمام مقادیر موجود در سطر اول را مقداردهی میکنیم.
myMatrix[1][0] = 14; myMatrix[1][1] = 15; myMatrix[1][2] = 16; |
به عنوان یک تمرین ساده برای کار با آرایه دو بعدی در جاوا، فرض کنید یک ماتریس با طول و عرض نامشخص در اختیار داریم.
با استفاده از قطعه کد زیر، مقادیر آن را به صورت ماتریسی در کنسول چاپ میکنیم.
1 2 3 4 5 6 7 8 9 10 11 | public void printMatrix(int[][] mtx){ for(int i=0; i< mtx.length; i++){ for(int j=0; j< mtx[0].length; j++){ System.out.print(mtx[i][j]+" "); } System.out.println(); } } |
در این مقاله ابتدا به معرفی آرایه (Array) در زبان برنامه نویسی جاوا (java) پرداختیم. سپس نحوه تعریف و کار با آرایه یک بعدی در جاوا را بررسی کردیم. ترفندهایی برای کارِ بهتر با آرایه جاوا مرور شد. و در نهایت مثالی از یک ماتریس به عنوان آرایه چند بعدی زدیم.
امیدواریم با این ساختمان داده پر استفاده در جاوا به خوبی آشنا شده باشید. اگر سوالی دارید، خوشحال میشیم راهنمای شما باشیم! بخش نظرات برای شماست…
سون لرن • آموزش...برچسب : نویسنده : استخدام کار 7learn بازدید : 384