JavaRush /Java блогы /Random-KK /Java-дағы массивтер туралы бірдеңе

Java-дағы массивтер туралы бірдеңе

Топта жарияланған
Сәлеметсіз бе! Бұрын оқыту кезінде біз жалғыз an objectілермен (немесе қарабайыр типтермен) жұмыс істедік. Бірақ бір нысанмен емес, бүкіл топпен жұмыс істеу керек болса ше? Мысалы, біз компаниямыздағы барлық қызметкерлердің туған күндерінің тізімін жасағымыз келеді. Онда, айталық, форматта 30 жол болуы керек: «Андрей Peterов, 25 қаңтар. Бұл жерде бізге арнайы деректер құрылымы, массив көмектеседі. Массивті нақты өмірдегі нысандармен салыстырсаңыз, оның құрылымы ұяшықтары бар банк қоймасына өте ұқсас: Java-дағы массивтер туралы бір нәрсе - 1Жиым да ұяшықтардан тұрады. Әрбір ұяшыққа бірдеңе қоюға болады. Бұл жағдайда мазмұнға қол жеткізу үшін ұяшық нөмірін білу қажет. Массив келесідей жасалады:
public class Main {

   public static void main(String[] args) {

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

   }
}
Мұнда біз 10 ұяшықтан тұратын массив жасадық. Сіз бірден массивтің кейбір мүмкіндіктеріне назар аудара аласыз:
  1. Ол қатаң анықталған түрдегі деректерді сақтайды. Егер біз бастапқыда жол массивін жасасақ String, онда біз басқа ештеңені сақтай алмаймыз. Деректер түрі массив құру кезінде көрсетіледі. Бұл оны клиент қалағанын сақтай алатын сейфтен ерекшелендіреді.
  2. Жиым қарабайыр типтердің деректерін (мысалы, int), жолдардың ( String) немесе бір сыныптың нысандарын сақтай алады. Дәлірек айтқанда, тіпті an objectілердің өзі емес, осы an objectілерге сілтемелер.
  3. Жасау кезінде массив өлшемін көрсету керек. Оны кейінірек көрсете алмайсыз немесе жасалғаннан кейін өлшемін өзгерте алмайсыз.
[]Java өрнектің екі жағындағы төртбұрышты жақшаларды қолдану арқылы массив жасалып жатқанын көрсетеді . Оларды анықтамалық айнымалы атауының алдында немесе кейін көрсетуге болады - ол кез келген жолмен жұмыс істейді:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Егер сіз массивке бірдеңе жазғыңыз келсе, мән жазылатын ұяшықтың нөмірін көрсетуіңіз керек. Массив ұяшықтарының нөмірлері 0-ден басталады. Нөлден бастау - бағдарламалауда кең таралған тәжірибе. Неғұрлым тезірек үйренсеңіз, соғұрлым жақсы :) Яғни, массивтіңJava-дағы массивтер туралы бір нәрсе - 2 бірінші ұяшығына қандай да бір мән қойғыңыз келсе , ол келесідей орындалады:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
Енді әріптестердің туған күндерін қамтитын массивіміздің бірінші ұяшығында Ленаның туған күні бар жол бар. Аналогия бойынша басқа мәндерді қосуға болады:
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";
   }
}
Назар аударыңыз: сегізінші ұяшыққа Олесяның туған күнін қостық (Неліктен No7 ұяшық сегізінші екенін ұмытып қалдыңыз ба?). Барлық басқа ұяшықтар толтырылмағанымен. Мәндерді массивке ретімен жазудың қажеті жоқ - мұндай шектеу жоқ. Екінші жағынан, егер сіз ретімен жазсаңыз, бос және бос ұяшықтардың санын бақылау оңайырақ болады және массивте «тесік» қалмайды. Егер сіз банк ұяшығы сияқты жиым ұяшығының мазмұнын алғыңыз келсе, оның нөмірін білуіңіз керек. Бұл келесідей орындалады:
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» дедік. Ол дәл солай істеді.

Java массивінің ұзындығы

Массивпен жұмыс істегенде оның ұзындығын арнайы қасиеті арқылы оңай білуге ​​болады - 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 мәнді сақтайды, бірақ біз оны жасаған кезде ол үшін size = 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]мәнінде 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

Java нысандарының массиві

Объектілердің массивтері мен примитивтердің массивтері жадта басқаша сақталатынын естігенсіз. Мысалы, үш нысанның массивін алайық 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");
   }
}
Мұнда түсінуге болатын бірнеше нәрсе бар:
  1. Примитивтер жағдайында Java массивтері көптеген нақты мәндерді сақтайды (мысалы, сандар int). Нысандар жағдайында массив көптеген сілтемелерді сақтайды. Жиым catsүш ұяшықтан тұрады, олардың әрқайсысында нысанға сілтеме бар Cat. Сілтемелердің әрқайсысы осы нысан сақталған жадтағы мекенжайды көрсетеді.
  2. Массив элементтері жадта бір блокта сақталады. Бұл оларға тиімдірек және жылдам қол жеткізу үшін жасалады. Осылайша, сілтеме catsжадтағы блокқа нұсқайды, онда барлық нысандар – массив элементтері сақталады. A cats[0]- осы блоктағы белгілі бір мекенжайға.
Java-дағы массивтер туралы бір нәрсе - 3Массив тек an objectілерді сақтай алмайтынын, оның өзі an object екенін түсіну маңызды.

Массивтер массиві немесе екі өлшемді массив

Осыған сүйене отырып, алдымызда сұрақ туындайды - мысалы, жолдар немесе сандар массивін емес, массивтер массивін жасай аламыз ба? Және жауап болады - иә, біз аламыз! Жиым оның ішінде кез келген нысандарды, соның ішінде басқа массивтерді сақтай алады. Мұндай массив екі өлшемді деп аталады. Егер сіз оны суретте бейнелесеңіз, ол кәдімгі кестеге өте ұқсас болады. Мысалы, біз әрқайсысы 10 ұяшықтан тұратын 3 сан массивін сақтайтын массив жасағымыз келеді int. Ол келесідей болады: Java-дағы массивтер туралы бірдеңе - 4Әрбір жол сандар массивін білдіреді int. Бірінші массив 1-ден 10-ға дейінгі сандарды, екіншісі -1-ден -10-ға дейінгі сандарды, үшіншісі - кездейсоқ сандар жиынын қамтиды. Осы массивтердің әрқайсысы біздің екі өлшемді массивіміздің ұяшығында сақталады. Кодтағы екі өлшемді массивді инициализациялау келесідей болады:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
Біздің екі өлшемді мысықтар массивінде әрқайсысы 5 ұяшықтан тұратын 3 массив сақталады. Егер біз нысанды екінші массивтің үшінші ұяшығына қойғымыз келсе, мұны келесідей орындаймыз:
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], бірақ бұл әдіс мәндерді бірден көрсетуге мүмкіндік береді. Неліктен екі өлшемді массив қажет болуы мүмкін? Мысалы, оның көмегімен сіз әйгілі «Жауынгерлік кеме» ойынын оңай қайта жасай аласыз: Java-дағы массивтер туралы бір нәрсе - 5«Жауынгерлік кемедегі» ойын алаңының құрылымы оны оңай сипаттауға болатындай: 10 массивтен, әрқайсысы 10 ұяшықтан тұратын екі өлшемді массив. . Сіз екі массив жасайсыз - өзіңізге және қарсыласыңызға:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
*Сіз кемелер орналасқан ұяшықтарды кейбір мәндермен (мысалы, сандар немесе белгілер) толтырасыз , содан кейін сіз және сіздің қарсыласыңыз ұяшық нөмірлеріне кезекпен қоңырау шаласыз:
  • теңіз шайқасы[6][5]!
  • Өткен! seaBattle2[6][6]!
  • Жарақат алды!
  • seaBattle2[6][7]!
  • Жарақат алды!
  • seaBattle2[6][8]!,
  • Өлтірілді!

Массивтер туралы қосымша ресурстар

Массивтер туралы көбірек білгіңіз келе ме? Төмендегі мақалаларға назар аударыңыз. Бұл тақырып бойынша көптеген қызықты және пайдалы ақпарат бар.
  1. Java тіліндегі массивтер – массивтер, оларды құру, инициализациялау және пайдалану туралы егжей-тегжейлі мақала. Мысалдармен.
  2. Arrays класы және оны қолдану - мақалада сыныптың кейбір әдістері сипатталғанArray
  3. Массивтер – массивтерге арналған JavaRush-тың алғашқы лекциясы.
  4. Көпөлшемді массивтер – мысалдары бар көпөлшемді массивтер туралы егжей-тегжейлі мақала.
  5. Нөл емес, нөлдік ұзындықтағы массивді қайтарыңыз - Тиімді бағдарламалау авторы Джошуа Блох бос массивтерді қалай жақсырақ қайтару керектігі туралы айтады.
Бұл массивтермен алғашқы танысуымызды аяқтайды, бірақ бұл олармен әрекеттесудің басы ғана. Келесі дәрістерде біз оларды пайдаланудың қызықты жолдарын көреміз, сонымен қатар осы деректер құрылымымен ыңғайлырақ жұмыс істеу үшін Java-да қандай кірістірілген функциялар бар екенін білеміз :)
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION