آموزش جاوا - قسمت ششم
جلسه قبل در مورد آرایهها صحبت کردیم و یادگرفتیم چطور میشه یک آرایه را تعریف کرد. نکتهای که تنها از بحث جلشه پیش باقی ماند این هست که آرایه به صورت final چه وضعیتی پیدا میکند.
همان طور که قبلا گفته شد وقتی یک متغییر Reference به صورت final تعریف میشود قابلیت new شدن مجدد را ندارد پس بنابراین نمیتوان آرایه را new کرد ولی میتوان مقادیر خانههای آرایه را تغییر داد. حتی اگر جنس خانههای آرایه به صورت primitive باشند.
final int[] array = new int[5];
array[0] = 2;
final Student[] students = new Student[5];
students[0] = new Student();
همون که بالا گفته شد آرایهها خاصیت Reference دارند و این متغییرها خاصیت Reference که چند جلسه قبلی گفته شده را دارند حتی اگر جنس خانههای آن primitive باشد.
همچنین تعریف آرایه ها به عنوان آرگومان ورودی و خروجی به این صورت هست:
public int[] incValue(int[] array){
for(int i = 0; i < array.length; i++){
array[i] = array[i] + 1;
}
return array;
}
که در واقع این متد ید آرایه دریافت میکند و به تک تک خانههای آن یک واحد اضافه کرده و ان را return میکند.
نحوه فراخونی این متد هم به صورت زیر است:
final int[] array1 = {1, 3, 2, 5, 8};
final int[] array2 = incValue(array1);
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
سوالی که پیش میاد این هست که اگه هر دو آرایه چاپ شوند گه مقداری نمایش داده خواهد شد؟
جواب این سوال رو بهش فک کنید و یا اجرا کنید (اخر جلسه در موردش حرف میزنیم)
بل از اینکه به ادامه بحث بریم در مورد کلاس Arrays صحبت کنیم. این کلاس یک کلاسی هست که شامل یک سری متد به صورت static هست که در واقع ابزار لازم برای کار با آرایهها را در احتیار ما میگذارد.
مثلا در مثال بالا ما از متد toString این کلاس استفاده کردیم که یک آرایه را برای ما چاپ میکند. این کلاس دارای متذهای خیلی خیلی مفید هستند که به صورت بهینه پیاده سازی شدهاند و میةوان از آنها استفاده کرد.
متدهای برای نمایش، برای جستجو، مرتبسازی، کپیکردن و … هست. پیشنهاد میکنم همیشه از این کلاس استفاده کنید.
کلاسهایی که همه توابع آنها به صورت static هستند و در واقع ابزاری را در اختیار ما قرار میدهند به آنها اصطلاحا کلاسای utils گفته میشود.
اگر بیشتر در مورد این نوع کلاسها بخواهیم صحبت کنیم میبینیم این کلاسهای utils دارای سازنده به صورت private هستند. در واقع با تعریف سازنده به صورت private این شرایط را فراهم میکنیم که از بیرون کلاس، هیچ کس اجازه ساخت نمونه از کلاس utils را ندارد. و اصولا هم نیازی بهش نداریم چون همه متدها به صورت static هست که در واقع بدون نمونه سازی میتوان از آنها استفاده کرد.
public class Arrays {
/**
* The minimum array length below which a parallel sorting
* algorithm will not further partition the sorting
* smaller sizes typically results in memory contention across
* tasks that makes parallel speedups unlikely.
*/
private static final int MIN_ARRAY_SORT_GRAN = 1<< 13;
// Supresser default constructor, ensuring non-instantiability.
private Arrays() {}
}
فقط دقت شود کسی از بیرون این کلاس اجازه ساخت نمونه را ندارد ولی از داخل این کلاس میتوان یک نمونه از خود کلاس ساخت.
شبیه کلاس Arrays میتوان کلاس معروف Math را تعریف کرد که در واقع ابزار ریاضی را در اختیار ما قرار میدهد. در واقع تمامی توابع اولیه ریاضی را در این کلاس utils میتونید پیدا کنید.
خوب بریم سراغ آرایه های دوبعدی و در واقع چندبعدی. آرایهها دوبعدی رو توضیح میدیم و شما میتونید از آرایهها با ابعاد بزرگتر از همین روش استفاده کرد.
آرایه های با ابعاد بزرگ عملا کاربردی نیستن به جز در موارد خاص. حتی آرایههای دوبعدی نیز کاربردی خیلی کمی در پیادهسازیهای شیگرا دارد.
در جاوا میتونید به این صورت آرایه دوبعدی تعریف کنید:
int[][] array = new int[2][3];
array[0][0] = 6;
و هم چنین به این صورت میتوانید مقدار دهی اولیه بکنید:
int[][] array = {{1, 2, 3}, {3, 4, 5}};
که در واقع دارای دو سطر که هر سطر آن دارای ۳ ستون هست.
در جاوا علاوه بر ساختن آرایهها به صورت بالا که به تعداد منظم سطر و ستون دارند یعنی هر ردیف داری تعداد ستون مشخصی هست (مثلا در مثال بالا هر سطر دقیقا ۳ ستون دارد) میتوان آرایههای تعریف کرد که تعداد ستون متفاوت داشته باشد.
علت این امر هم چیزی نیست در مفهوم آرایهها. در واقع جاوا فقط آرایه یک بعدی دارد!! ولی میتوان هر خانه این آرایه یک بعدی را شما یه آرایه قرار بدین!! به این صورت میتونید آرایه دو بعدی بسازین یا با ابعاد بیشتر:
int[][] array = new int[3][];
array[0] = new int[2];
array[1] = new int[5];
array[2] = new int[1];
در واقع الان ما یه آرایه دو بعدی که دارای سه سطر هست داریم که سطر اول آن ۲ ستون و سطر بعدی ۵ ستون و سطر آخر یک ستون دارد!
و به این صورت هم میتوان با مقدار دهی اولیه این آرایه را مقدار دهی کنیم:
int[][] array = {{1,2}, {1,2,3,4,5}, {1}};
همچنین برای چاپ این آرایه میتوان به این صورت عمل کرد:
for(int i = 0; i < array.length; i++){
for(int j = 0; j < array[i].length; j++)
System.out.print(array[i][j] + “ “);
}
System.out.println();
}
که در واقع array.length تعداد سطرهای آرایه را برمیگرداند و array[i].length تعداد ستونهای سطر iام را نشان میدهد.
نکته انتهایی این بخش هم این هست که آرایه ها در جاوا دارای طول ثابتی هستند و نمیتوان بعد از تعریف طول آنها را تغییر داد مگر اینکه از اول new شوند. در جلسات آینده در مورد list که نوعی از collection ها هستن که در واقع list در اختیار ما قرا میدهد که دارای طول متغییر هستند صحبت میکنیم.
این جلسه را زودتر تموم میکنیم و وارد بخش بعدی نمیشیم. چون بحث بعدی یکم گسترده هست و نیاز به یک جلسه کامل دارد
در صورتی که سوالی هست از این جلسه من در خدمت هستم
در انتها هم بنده فراموش کردم. جواب سوال در داخل آموزش هم به این صورت هست:
خروجی کد:
[2, 4, 3, 6, 9]
[2, 4, 3, 6, 9]
نظرات کاربران