JavaRush /Java blogi /Random-UZ /Java-da massivlar haqida nimadir

Java-da massivlar haqida nimadir

Guruhda nashr etilgan
Salom! Ilgari, mashg'ulot paytida biz bitta ob'ektlar (yoki ibtidoiy turlar) bilan ishladik. Ammo bitta ob'ekt bilan emas, balki butun guruh bilan ishlashimiz kerak bo'lsa-chi? Misol uchun, biz kompaniyamizdagi barcha xodimlarning tug'ilgan kunlari ro'yxatini tuzmoqchimiz. U, aytaylik, formatda 30 qatordan iborat bo'lishi kerak: "Andrey Petrov, 25 yanvar." Bu erda bizga maxsus ma'lumotlar strukturasi, massiv yordam beradi. Agar siz massivni real hayotdagi obyektlar bilan solishtirsangiz, uning tuzilishi yacheykalari bo'lgan bank omboriga juda o'xshaydi: Java-da massivlar haqida bir narsa - 1Massiv ham hujayralardan iborat. Har bir hujayraga biror narsa qo'yishingiz mumkin. Bunday holda, tarkibga kirish uchun siz hujayra raqamini bilishingiz kerak. Massiv quyidagicha yaratilgan:
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10]; // array of Java strings

   }
}
Bu erda biz 10 ta hujayradan iborat massivni yaratdik. Siz darhol massivning ba'zi xususiyatlariga e'tibor berishingiz mumkin:
  1. U qat'iy belgilangan turdagi ma'lumotlarni saqlaydi. Agar biz dastlab string array ni yaratgan bo'lsak String, unda boshqa hech narsa saqlay olmaymiz. Ma'lumotlar turi massivni yaratishda belgilanadi. Bu uni mijoz xohlagan narsani saqlashi mumkin bo'lgan seyfdan ajratib turadigan narsa.
  2. Massiv ibtidoiy turdagi ma'lumotlarni (masalan, int), satrlarni ( String) yoki bir xil sinf ob'ektlarini saqlashi mumkin. Aniqrog'i, ob'ektlarning o'zi ham emas, balki ushbu ob'ektlarga havolalar.
  3. Yaratish vaqtida massivning o'lchami ko'rsatilishi kerak. Siz uni keyinroq koʻrsata olmaysiz yoki yaratgandan keyin oʻlchamini oʻzgartira olmaysiz.
[]Java ifodaning har ikki tomonidagi kvadrat qavslar yordamida massiv yaratilayotganligini bildiradi . Ular mos yozuvlar o'zgaruvchisi nomidan oldin yoki keyin ko'rsatilishi mumkin - u har qanday tarzda ishlaydi:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Agar siz massivga biror narsa yozmoqchi bo'lsangiz, qiymat yoziladigan katak raqamini ko'rsatishingiz kerak. Massiv katak raqamlari 0 dan boshlanadi. Noldan boshlash dasturlashda keng tarqalgan amaliyotdir. Qanchalik tez ko'niksangiz, shuncha yaxshi :) Ya'ni, agar siz massivningJava-da massivlar haqida bir narsa - 2 birinchi katagiga qandaydir qiymat qo'ymoqchi bo'lsangiz , u quyidagicha amalga oshiriladi:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
Endi massivimizning birinchi katakchasida hamkasblarning tug'ilgan kunlari mavjud, unda Lenaning tug'ilgan kuni bilan qator mavjud. Analogiya bo'yicha siz boshqa qiymatlarni qo'shishingiz mumkin:
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";
   }
}
E'tibor bering: biz Olesyaning tug'ilgan kunini sakkizinchi katakka qo'shdik (nega 7-sonli kamera sakkizinchi ekanligini unutdingizmi?). Boshqa barcha hujayralar to'ldirilmagan bo'lsa-da. Qiymatlarni massivga tartibda yozish shart emas - bunday cheklov yo'q. Boshqa tomondan, agar siz tartibda yozsangiz, bo'sh va ishg'ol qilingan hujayralar sonini kuzatish ancha oson bo'ladi va massivda "teshiklar" qolmaydi. Agar siz bank xujayrasidagi kabi massiv yacheyka mazmunini olishni istasangiz, uning raqamini bilishingiz kerak. Bu shunday amalga oshiriladi:
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);
   }
}
Konsol chiqishi:

Олеся Остапенко, 3 января
Biz o'zgaruvchi yaratdik Stringva kompilyatorga: "Masivdagi 7 indeksli katakchani toping birthdaysva u erda saqlangan qiymatni o'zgaruvchiga belgilang String olesyaBirthday" dedik. U aynan shunday qilgan.

Java massiv uzunligi

Massiv bilan ishlashda siz uning uzunligini maxsus xususiyatdan foydalanib osongina topishingiz mumkin - 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);
   }
}
Konsol chiqishi:

10
Eslatma:Xususiyat lengthto'ldirilgan hujayralar sonini emas, balki massiv hajmini saqlaydi. Bizning massivimiz faqat 3 ta qiymatni saqlaydi, lekin biz uni yaratganimizda uning uchun size = 10 ni belgiladik.Bu maydon qaytaradigan qiymatdir length. Nima uchun bu foydali bo'lishi mumkin? Masalan, agar siz konsolda barcha tug'ilgan kunlar ro'yxatini chop qilmoqchi bo'lsangiz (hech kim unutilmaganligini tekshirish uchun), buni bitta oddiy tsiklda qilishingiz mumkin:
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]);
       }
   }
}
Loopda biz idastlab nolga teng bo'lgan o'zgaruvchini yaratamiz. Har bir o'tishda biz massivimizdan i indeksli katakchani olamiz va uning qiymatini konsolga chop qilamiz. Loop 10 ta takrorlashni amalga oshiradi va i qiymatlari 0 dan 9 gacha ko'tariladi - bizning massivimiz hujayralarining indekslariga ko'ra! Shunday qilib, biz barcha qiymatlarni konsolga bosib chiqaramiz.Aslida birthdays[0], birthdays[9] massivni boshqacha yaratish usullari mavjud. Masalan, raqamlar qatori intquyidagicha tuzilishi mumkin:
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
Ushbu usul "tez ishga tushirish" deb ataladi. Bu juda qulay, chunki biz darhol massiv yaratamiz va uni qiymatlar bilan to'ldiramiz. Massivning o'lchamini aniq belgilashning hojati yo'q - lengthtez ishga tushirish vaqtida maydon avtomatik ravishda to'ldiriladi.
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);
   }
}
Konsol chiqishi:

9

Java ob'ektlar massivi

Ob'ektlar massivlari va ibtidoiy massivlar xotirada turlicha saqlanadi, deb eshitgansiz. Masalan, uchta ob'ektdan iborat massivni olaylik 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");
   }
}
Bu erda tushunish kerak bo'lgan bir nechta narsa bor:
  1. Primitivlar bo'lsa, Java massivlari ko'plab o'ziga xos qiymatlarni saqlaydi (masalan, raqamlar int). Ob'ektlarga kelsak, massiv ko'plab havolalarni saqlaydi. Massiv catsuchta hujayradan iborat bo'lib, ularning har biri ob'ektga havolani o'z ichiga oladi Cat. Bog'lanishlarning har biri ushbu ob'ekt saqlanadigan xotiradagi manzilga ishora qiladi.
  2. Massiv elementlari xotirada bitta blokda saqlanadi. Bu ularga yanada samarali va tez kirish uchun amalga oshiriladi. Shunday qilib, havola catsbarcha ob'ektlar - massivning elementlari - saqlanadigan xotiradagi blokga ishora qiladi. A cats[0]- ushbu blokdagi ma'lum bir manzilga.
Java-da massivlar haqida bir narsa - 3Massiv nafaqat ob'ektlarni saqlashi, balki uning o'zi ham ob'ekt ekanligini tushunish muhimdir.

Massivlar massivi yoki ikki o'lchovli massiv

Shunga asoslanib, biz savolga duch kelamiz - masalan, satrlar yoki raqamlar massivini emas, balki massivlarni yaratish mumkinmi? Va javob bo'ladi - ha, biz qila olamiz! Massiv o'z ichidagi har qanday ob'ektni, shu jumladan boshqa massivlarni ham saqlashi mumkin. Bunday massiv ikki o'lchovli deb nomlanadi. Agar siz uni rasmda tasvirlasangiz, u oddiy stolga juda o'xshash bo'ladi. Misol uchun, biz har birida 10 ta hujayradan iborat 3 ta sonli massivni saqlaydigan massiv yaratmoqchimiz int. Bu quyidagicha ko'rinadi: Java-da massivlar haqida bir narsa - 4Har bir qator raqamlar qatorini ifodalaydi int. Birinchi massiv 1 dan 10 gacha raqamlarni, ikkinchisi -1 dan -10 gacha, uchinchisi - tasodifiy sonlar to'plamini o'z ichiga oladi. Ushbu massivlarning har biri bizning ikki o'lchovli massivimizning yacheykasida saqlanadi. Kodda ikki o'lchovli massivni ishga tushirish quyidagicha ko'rinadi:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Bizning ikki o'lchovli mushuklar massivi har biri 5 hujayradan iborat 3 ta massivni saqlaydi. Agar biz ob'ektimizni ikkinchi massivning uchinchi katagiga qo'ymoqchi bo'lsak, buni shunday qilamiz:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluff");
}
[1]ikkinchi massivga ishora qiladi va [2]bu massivning uchinchi katagiga ishora qiladi. Ikki o'lchovli massiv bir nechta massivlardan iborat bo'lganligi sababli, uni aylanib o'tish va barcha qiymatlarni konsolga chop etish (yoki barcha katakchalarni to'ldirish) uchun bizga ikkita, ichki o'rnatilgan pastadir kerak:
for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
Tashqi tsiklda (o'zgaruvchi i) biz ikki o'lchovli massivimizni tashkil etuvchi barcha massivlarni navbatma-navbat bosib o'tamiz. Ichki pastadirda (o'zgaruvchi j) biz har bir massivning barcha hujayralarini takrorlaymiz. Natijada, cats[0][0]konsolda birinchi bo'lib ob'ekt (birinchi massiv, birinchi katak), ikkinchi ob'ekt cats[0][1](birinchi massiv, ikkinchi katak) bo'ladi. Birinchi massiv tugagach, , cats[1][0]va cats[1][1]hokazolar cats[1][2]chiqariladi. Aytgancha, tez ishga tushirish ikki o'lchovli massivlar uchun ham mavjud:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
numbersOdatda, biz ikki o'lchovli massivni sifatida yozamiz int[3][3], lekin bu usul bizga darhol qiymatlarni ko'rsatishga imkon beradi. Nima uchun ikki o'lchovli massiv kerak bo'lishi mumkin? Xo'sh, masalan, uning yordami bilan siz mashhur "Battleship" o'yinini osongina qayta tiklashingiz mumkin: Java-da massivlar haqida bir narsa - 5"Jang kemasi" dagi o'yin maydonining tuzilishi shundayki, uni osongina tasvirlash mumkin: 10 massiv, har biri 10 hujayradan iborat ikki o'lchovli massiv. . Siz ikkita shunday massivni yaratasiz - o'zingiz va raqibingiz uchun:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
*Siz kemalaringiz joylashgan kataklarni ba'zi qiymatlar (masalan, raqamlar yoki belgilar) bilan to'ldirasiz , so'ngra siz va raqibingiz navbatma-navbat uyali raqamlarga qo'ng'iroq qilasiz:
  • dengiz jangi[6][5]!
  • O'tgan! seaBattle2[6][6]!
  • Yaralangan!
  • seaBattle2[6][7]!
  • Yaralangan!
  • seaBattle2[6][8]!,
  • O'ldirilgan!

Massivlar haqida qo'shimcha manbalar

Massivlar haqida ko'proq bilmoqchimisiz? Iltimos, quyidagi maqolalarni ko'rib chiqing. Ushbu mavzu bo'yicha juda ko'p qiziqarli va foydali ma'lumotlar mavjud.
  1. Java-dagi massivlar - massivlar, ularni yaratish, ishga tushirish va foydalanish haqida batafsil maqola. Misollar bilan.
  2. Arrays sinfi va undan foydalanish - maqolada sinfning ba'zi usullari tasvirlanganArray
  3. Massivlar massivlarga bag'ishlangan birinchi JavaRush ma'ruzasidir.
  4. Ko'p o'lchovli massivlar - misollar bilan ko'p o'lchovli massivlar haqida batafsil maqola.
  5. Null emas, nol uzunlikdagi massivni qaytaring - Samarali dasturlash muallifi Joshua Bloch bo'sh massivlarni qanday qilib yaxshiroq qaytarish haqida gapiradi.
Bu massivlar bilan birinchi tanishuvimizni yakunlaydi, ammo bu ular bilan o'zaro aloqaning boshlanishi. Keyingi ma'ruzalarda biz ulardan foydalanishning qiziqarli usullarini ko'rib chiqamiz, shuningdek, ushbu ma'lumotlar strukturasi bilan yanada qulayroq ishlash uchun Java-ning qanday o'rnatilgan funktsiyalari borligini bilib olamiz :)
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION