سلام! قبلاً در حین آموزش با اشیاء منفرد (یا انواع اولیه) کار می کردیم. اما اگر لازم باشد نه با یک شی، بلکه با یک گروه کامل کار کنیم، چه؟ به عنوان مثال، ما می خواهیم لیستی از تاریخ تولد همه کارکنان شرکت خود ایجاد کنیم. مثلاً باید 30 سطر در قالب داشته باشد: «آندری پتروف، 25 ژانویه». یک ساختار داده خاص، یک آرایه، در اینجا به ما کمک می کند. اگر آرایه را با اشیایی از زندگی واقعی مقایسه کنید، ساختار آن بسیار شبیه یک صندوق بانکی با سلول است: این آرایه نیز از سلولها تشکیل شده است. می توانید در هر سلول چیزی قرار دهید. در این صورت برای دسترسی به محتوا باید شماره همراه را بدانید. آرایه به این صورت ایجاد می شود:
public class Main {
public static void main(String[] args) {
String [] birthdays = new String[10]; // array of Java strings
}
}
در اینجا ما یک آرایه از 10 سلول ایجاد کرده ایم. می توانید بلافاصله به برخی از ویژگی های آرایه توجه کنید:
- این داده ها را از یک نوع کاملاً تعریف شده ذخیره می کند. اگر در ابتدا یک آرایه رشته ای ایجاد کنیم
String
، نمی توانیم چیز دیگری را در آن ذخیره کنیم. نوع داده هنگام ایجاد آرایه مشخص می شود. این همان چیزی است که آن را از یک صندوق امانات متمایز می کند که مشتری می تواند هر آنچه را که می خواهد در آن ذخیره کند. - یک آرایه میتواند دادههایی از انواع اولیه (مثلاً
int
)، رشتهها (String
)، یا اشیاء هم کلاس را ذخیره کند. به عبارت دقیق تر، نه حتی خود اشیا، بلکه به این اشیاء پیوند دارند. - اندازه آرایه باید در حین ایجاد مشخص شود. بعداً نمیتوانید آن را مشخص کنید یا بعد از ایجاد اندازه آن را تغییر دهید.
[]
جاوا نشان می دهد که یک آرایه با استفاده از براکت های مربع در دو طرف عبارت ایجاد می شود . آنها را می توان قبل از نام متغیر مرجع یا بعد از آن مشخص کرد - به هر صورت کار می کند:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
اگر می خواهید چیزی در یک آرایه بنویسید، باید تعداد سلولی که مقدار در آن نوشته می شود را مشخص کنید. اعداد سلول های آرایه از 0 شروع می شوند. شروع از صفر یک روش معمول در برنامه نویسی است. هر چه سریعتر به آن عادت کنید، بهتر است :) یعنی اگر می خواهید مقداری در خانه اول آرایه قرار دهید ، این کار به این صورت انجام می شود:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
}
}
اکنون اولین سلول آرایه ما، که حاوی تولد همکاران است، حاوی یک رشته با تولد Lena است. بر اساس قیاس، می توانید مقادیر دیگری را اضافه کنید:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
birthdays[1] = "Kolya Romanov, May 18";
birthdays[7] = "Olesya Ostapenko, January 3";
}
}
لطفاً توجه داشته باشید: ما تولد اولسیا را به سلول هشتم اضافه کردیم (آیا فراموش کرده اید که چرا سلول شماره 7 هشتمین است؟). اگرچه تمام سلول های دیگر پر نشده اند. لازم نیست مقادیر را به ترتیب در آرایه بنویسید - چنین محدودیتی وجود ندارد. از طرف دیگر، اگر به ترتیب بنویسید، پیگیری تعداد سلولهای آزاد و اشغال شده بسیار آسانتر خواهد بود و هیچ سوراخی در آرایه باقی نمیماند. اگر می خواهید محتویات یک سلول آرایه را دریافت کنید، مانند سلول بانک، باید شماره آن را بدانید. این کار به این صورت انجام می شود:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
birthdays[1] = "Kolya Romanov, May 18";
birthdays[7] = "Olesya Ostapenko, January 3";
String olesyaBirthday = birthdays[7];
System.out.println(olesyaBirthday);
}
}
خروجی کنسول:
Олеся Остапенко, 3 января
ما یک متغیر ایجاد کردیم String
و به کامپایلر گفتیم: "سلول با شاخص 7 را در آرایه پیدا کنید birthdays
و مقدار ذخیره شده در آنجا را به متغیر اختصاص دهید String
olesyaBirthday
." او دقیقاً همین کار را کرد.
طول آرایه جاوا
هنگام کار با یک آرایه، می توانید به راحتی با استفاده از یک ویژگی خاص به طول آن پی ببرید -length
.
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
birthdays[1] = "Kolya Romanov, May 18";
birthdays[7] = "Olesya Ostapenko, January 3";
int birthdaysLength = birthdays.length;
System.out.println(birthdaysLength);
}
}
خروجی کنسول:
10
توجه داشته باشید:این ویژگی length
اندازه آرایه را ذخیره می کند، نه تعداد سلول های پر شده را. آرایه ما فقط 3 مقدار را ذخیره می کند، اما زمانی که آن را ایجاد کردیم، اندازه = 10 را برای آن مشخص کردیم. این مقداری است که فیلد برمی گرداند length
. چرا این ممکن است مفید باشد؟ خوب، برای مثال، اگر میخواهید فهرستی از همه تولدها را در کنسول چاپ کنید (برای اینکه مطمئن شوید کسی فراموش نشده است)، میتوانید این کار را در یک حلقه ساده انجام دهید:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
birthdays[1] = "Kolya Romanov, May 18";
birthdays[2] = "Vika Ignatova, July 12";
birthdays[3] = "Denis Kozlov, September 7";
birthdays[4] = "Maxim Maslennikov, November 9";
birthdays[5] = "Roman Baranov, August 14";
birthdays[6] = "Valery Pyatkina, April 1";
birthdays[7] = "Olesya Ostapenko, January 3";
birthdays[8] = "Kostya Gurko, October 19";
birthdays[9] = "Seryozha Naumov, May 3";
for (int i = 0; i < birthdays.length; i++) {
System.out.println(birthdays[i]);
}
}
}
در حلقه یک متغیر ایجاد می کنیم i
که در ابتدا برابر با صفر است. در هر پاس، سلول با شاخص i را از آرایه خود می گیریم و مقدار آن را در کنسول چاپ می کنیم. حلقه 10 تکرار می کند و مقادیر i از 0 به 9 افزایش می یابد - فقط با توجه به شاخص های سلول های آرایه ما! به این ترتیب ما تمام مقادیر را از birthdays[0]
to به کنسول چاپ خواهیم کرد birthdays[9]
در واقع راه هایی برای ایجاد یک آرایه متفاوت وجود دارد. به عنوان مثال، آرایه ای از اعداد را int
می توان به شکل زیر ایجاد کرد:
public class Main {
public static void main(String[] args) {
int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
}
}
به این روش "راه اندازی سریع" می گویند. این کاملاً راحت است که بلافاصله یک آرایه ایجاد می کنیم و آن را با مقادیر پر می کنیم. نیازی به مشخص کردن صریح اندازه آرایه نیست - فیلد length
به طور خودکار در طول اولیه سازی سریع پر می شود.
public class Main {
public static void main(String[] args) {
int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
System.out.println(numbers.length);
}
}
خروجی کنسول:
9
آرایه شی جاوا
قبلاً شنیده اید که آرایه های اشیاء و آرایه های اولیه به طور متفاوتی در حافظه ذخیره می شوند. بیایید برای مثال آرایه ای از سه شی را در نظر بگیریمCat
:
public class Cat {
private String name;
public Cat(String name) {
this.name = name;
}
public static void main(String[] args) {
Cat[] cats = new Cat[3];
cats[0] = new Cat("Thomas");
cats[1] = new Cat("Hippopotamus");
cats[2] = new Cat("Philip Markovich");
}
}
در اینجا باید چند نکته را فهمید:
- در مورد اولیه، آرایه های جاوا مقادیر خاص زیادی (مانند اعداد
int
) را ذخیره می کنند. در مورد اشیا، یک آرایه منابع بسیاری را ذخیره می کند. این آرایهcats
از سه سلول تشکیل شده است که هر سلول حاوی یک مرجع به یک شی استCat
. هر یک از پیوندها به آدرسی در حافظه اشاره می کند که آن شیء در آن ذخیره می شود. - عناصر آرایه در یک بلوک واحد در حافظه ذخیره می شوند. این کار برای دسترسی کارآمدتر و سریعتر به آنها انجام می شود. بنابراین، پیوند
cats
به یک بلوک در حافظه اشاره می کند که در آن همه اشیا - عناصر آرایه - ذخیره می شوند. Acats[0]
- به یک آدرس خاص در این بلوک.
آرایه آرایه یا آرایه دو بعدی
بر این اساس، ما با این سوال روبرو هستیم - آیا می توانیم برای مثال، نه یک آرایه از رشته ها یا اعداد، بلکه یک آرایه از آرایه ها ایجاد کنیم؟ و پاسخ این خواهد بود - بله، ما می توانیم! یک آرایه می تواند هر شیء را در خود ذخیره کند، از جمله آرایه های دیگر. چنین آرایه ای دو بعدی نامیده می شود. اگر آن را در یک تصویر به تصویر بکشید، بسیار شبیه به یک میز معمولی است. به عنوان مثال، ما می خواهیم یک آرایه ایجاد کنیم که 3 آرایه اعداد راint
با 10 خانه ذخیره کند. به این صورت خواهد بود: هر خط نشان دهنده آرایه ای از اعداد است int
. آرایه اول شامل اعداد از 1 تا 10، دوم - از -1 تا -10، سوم - مجموعه ای از اعداد تصادفی است. هر یک از این آرایه ها در سلولی از آرایه دو بعدی ما ذخیره می شوند. راه اندازی یک آرایه دو بعدی در کد به صورت زیر است:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
}
آرایه گربه های دو بعدی ما 3 آرایه از 5 سلول را ذخیره می کند. اگر بخواهیم شی خود را در سلول سوم آرایه دوم قرار دهیم، این کار را به صورت زیر انجام می دهیم:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
cats[1][2] = new Cat("Fluff");
}
[1]
به آرایه دوم اشاره می کند و [2]
به سلول سوم این آرایه اشاره می کند. از آنجایی که یک آرایه دو بعدی از چندین آرایه تشکیل شده است، برای عبور از آن و چاپ تمام مقادیر در کنسول (یا پر کردن تمام سلول ها)، به یک حلقه تو در تو نیاز داریم:
for (int i = 0; i < cats.length; i++) {
for (int j = 0; j < cats[i].length; j++) {
System.out.println(cats[i][j]);
}
}
در حلقه بیرونی (متغیر i
)، به نوبت تمام آرایه هایی را که آرایه دو بعدی ما را تشکیل می دهند، عبور می دهیم. در حلقه داخلی (متغیر j
) در تمام سلول های هر آرایه تکرار می کنیم. در نتیجه، شی cats[0][0]
(آرایه اول، سلول اول) ابتدا در کنسول نمایش داده می شود و شی دوم cats[0][1]
(آرایه اول، سلول دوم) خواهد بود. وقتی اولین آرایه تمام شد، , cats[1][0]
و cats[1][1]
غیره cats[1][2]
خروجی می شود. به هر حال، مقداردهی اولیه سریع برای آرایه های دو بعدی نیز موجود است:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
به طور معمول، ما یک آرایه دو بعدی را numbers
به صورت می نویسیم int[3][3]
، اما این روش به ما امکان می دهد بلافاصله مقادیر را مشخص کنیم. چرا ممکن است یک آرایه دو بعدی مورد نیاز باشد؟ خوب، برای مثال، با کمک آن می توانید به راحتی بازی معروف "Battleship" را بازسازی کنید: ساختار زمین بازی در "Battleship" به گونه ای است که می توان آن را به راحتی توصیف کرد: یک آرایه دو بعدی از 10 آرایه، هر کدام 10 سلول . شما دو آرایه از این قبیل ایجاد می کنید - برای خود و حریف:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
*
شما سلول هایی را که کشتی های شما در آنها قرار دارند با مقادیری (مثلاً اعداد یا علائم) پر می کنید و سپس شما و حریف به نوبت با شماره های سلول تماس می گیرید:
- seaBattle[6][5]!
- گذشته! seaBattle2 [6] [6]!
- مجروح!
- seaBattle2 [6][7]!
- مجروح!
- seaBattle2[6][8]!،
- کشته شده!
منابع اضافی در مورد آرایه ها
آیا می خواهید در مورد آرایه ها بیشتر بدانید؟ لطفا به مقالات زیر نگاهی بیندازید. اطلاعات جالب و مفید زیادی در مورد این موضوع وجود دارد.- آرایه ها در جاوا - یک مقاله مفصل در مورد آرایه ها، ایجاد، مقداردهی اولیه و استفاده از آنها. با مثال.
- کلاس Arrays و استفاده از آن - این مقاله برخی از متدهای کلاس را توضیح می دهد
Array
- Arrays اولین سخنرانی JavaRush است که به آرایه ها اختصاص داده شده است.
- آرایه های چند بعدی - مقاله مفصلی در مورد آرایه های چند بعدی با مثال.
- یک آرایه با طول صفر را برگردانید، نه تهی - Joshua Bloch نویسنده Effective Programming در مورد چگونگی برگرداندن بهتر آرایه های خالی صحبت می کند.
GO TO FULL VERSION