JavaRush /Java блогу /Random-KY /Javaдагы массивдер жөнүндө бир нерсе

Javaдагы массивдер жөнүндө бир нерсе

Группада жарыяланган
Салам! Мурда тренинг учурунда биз жалгыз an objectтер (же примитивдүү типтер) менен иштечүбүз. Бирок бир an object менен эмес, бүтүндөй топ менен иштөө керек болсочу? Мисалы, биз ишканабыздагы бардык кызматкерлердин туулган күнүнүн тизмесин түзгүбүз келет. Анда, айталы, форматта 30 сап болушу керек: «Андрей Peterов, 25-январь». Бул жерде бизге атайын маалымат структурасы, массив жардам берет. Эгер массивди реалдуу жашоодогу an objectилер менен салыштырсаңыз, анын түзүлүшү уячалары бар банк сактагычына абдан окшош: Javaдагы массивдер жөнүндө бир нерсе - 1Массив дагы клеткалардан турат. Ар бир клеткага бир нерсе салсаңыз болот. Бул учурда, мазмунга кирүү үчүн сиз клетканын номерин бorшиңиз керек. Массив төмөнкүдөй түзүлөт:
public class Main {

   public static void main(String[] args) {

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

   }
}
Бул жерде биз 10 клеткадан турган массив түздүк. Сиз дароо массивдин айрым өзгөчөлүктөрүнө көңүл бурсаңыз болот:
  1. Ал так аныкталган типтеги маалыматтарды сактайт. Эгерде биз алгач сап массивин түзгөн болсок String, анда башка эч нерсени сактай албайбыз. Берorштердин түрү массивди түзүүдө көрсөтүлөт. Бул аны кардар каалаганын сактай турган сейфтен айырмалап турат.
  2. Массив примитивдүү типтеги маалыматтарды (мисалы, int), саптарды ( String) же бир класстын an objectтерин сактай алат. Тагыраак айтканда, ал тургай 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 камера сегизинчи экенин унутуп калдыңызбы?). Бардык башка клеткалар толтурулган эмес да. Массивге маанилерди ирети менен жазуу зарыл эмес - мындай чектөө жок. Экинчи жагынан, эгер сиз ирети менен жазсаңыз, бош жана ээлеген уячалардын санын эсепке алуу бир топ жеңилдейт жана массивде "тешиктер" калbyte. Эгерде сиз банк ячейкасындагыдай массивдин мазмунун алгыңыз келсе, анын номерин бorшиңиз керек. Бул төмөнкүдөй жасалат:
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 гана маанини сактайт, бирок биз аны түзгөндө, биз ал үчүн өлчөмү = 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 Object Array

Объекттердин массивдери жана примитивдердин массивдери эстутумда башкача сакталат деп уккансыз. Мисалы, үч an objectтен турган массивди алалы 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үч уячадан турат, алардын ар бири an objectке шилтемени камтыйт Cat. Шилтемелердин ар бири ошол an object сакталган эстутумдагы даректи көрсөтөт.
  2. Массивдин элементтери эстутумда бир блокто сакталат. Бул аларга кыйла натыйжалуу жана тез жетүү үчүн жасалат. Ошентип, шилтеме catsэс тутумдагы блокту көрсөтөт, анда бардык an objectтер - массивдин элементтери сакталат. A cats[0]- бул блоктун ичиндеги белгилүү бир дарекке.
Javaдагы массивдер жөнүндө бир нерсе - 3Массив an objectтерди гана сактабастан, анын өзү 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 массивди сактайт. Эгерде an objectибизди экинчи массивдин үчүнчү уячасына салгыбыз келсе, анда биз муну төмөнкүдөй кылабыз:
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) биз ар бир массивдин бардык уячаларын кайталайбыз. Натыйжада, an object cats[0][0](биринчи массив, биринчи уяча) консолдо биринчи көрсөтүлөт, ал эми экинчи an object cats[0][1](биринчи массив, экинчи уяча) болот. Биринчи массив түгөнгөндө, , cats[1][0], cats[1][1]жана cats[1][2]башкалар чыгарылат. Баса, тез инициализация эки өлчөмдүү массивдер үчүн да жеткorктүү:
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];
Сиз кээ бир баалуулуктар менен (мисалы, сандар же белгилер *) кемелериңиз жайгашкан уячаларды толтурасыз, андан кийин сиз жана сиздин атаандашыңыз кезектешип уюлдук номерлерге чаласыз:
  • seaBattle[6][5]!
  • Өткөн! seaBattle2[6][6]!
  • Жарадар!
  • seaBattle2[6][7]!
  • Жарадар!
  • seaBattle2[6][8]!,
  • өлтүрүлдү!

Массивдер жөнүндө кошумча ресурстар

Массивдер жөнүндө көбүрөөк билгиңиз келеби? Сураныч, төмөндөгү макалаларды карап көрүңүз. Бул тема боюнча көптөгөн кызыктуу жана пайдалуу маалыматтар бар.
  1. Java тorндеги массивдер - массивдер, аларды түзүү, инициализациялоо жана колдонуу жөнүндө кеңири макала. Мисалдар менен.
  2. Arrays классы жана аны колдонуу - макалада класстын кээ бир ыкмалары сүрөттөлөтArray
  3. Массивдер массивдерге арналган биринчи JavaRush лекциясы.
  4. Көп өлчөмдүү массивдер - мисалдар менен көп өлчөмдүү массивдер жөнүндө кеңири макала.
  5. Нөл эмес, нөл узундуктагы массивди кайтарыңыз - Натыйжалуу программалоонун автору Жошуа Блох бош массивдерди кантип жакшыраак кайтаруу керектиги жөнүндө айтат.
Бул массивдер менен биздин биринчи таанышууну аяктайт, бирок бул алар менен өз ара аракеттенүүнүн башталышы гана. Кийинки лекцияларда биз аларды колдонуунун кызыктуу жолдорун көрөбүз, ошондой эле бул маалымат структурасы менен иштөө үчүн Java кандай камтылган функциялары бар экенин билебиз :)
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION