CodeGym /Kurslar /Java SELF AZ /Mürəkkəb massivlərlə iş

Mürəkkəb massivlərlə iş

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. String tipli massiv

Qısaca String tipli massiv haqqında danışmaq istəyirəm.

Daha əvvəl dediyimiz kimi, massiv istənilən tipdə ola bilər. Yəni, String tipli massiv yaratmaq mümkündür. Klaviaturadan «10 sətir mətn daxil edib onları tərs qaydada ekrana çıxaran» proqram yazmalı olsaydıq, kod belə görünərdi:

Scanner console = new Scanner(System.in);
String[] array = new String[10];
for (int i = 0; i < 10; i++)
{
   array[i] = console.nextLine();
}
for (int i = 9; i >= 0; i--)
{
   System.out.println(array[i]);
}
Scanner obyektini yaradırıq
10 elementlik massiv obyekti yaradırıq
0-dan 9-a qədər dövr

Klaviaturadan mətn oxuyub onu massivdə növbəti hüceyrəyə yazırıq
9-dan 0-a qədər dövr

Massivin növbəti hüceyrəsini ekrana çıxarırıq

Kod demək olar ki, dəyişməyib! Yalnız massiv yaradarkən int tipini String ilə əvəz etmək və klaviaturadan mətn oxuyarkən nextInt() metodunu nextLine() ilə əvəz etmək lazım oldu.


2. String tipli String massiv yaddaşda

Və daha bir faydalı fakt. 3 şəkilə baxaq:

Şəkil 1. String obyektinin yaddaşda necə yerləşməsi:

String tipi massiv yaddaşda

Bu şəkil əvvəlki mühazirələrdən götürülüb.

Diqqət edək ki, mətn birbaşa dəyişəndə ​​saxlanmır: onun üçün ayrıca yaddaş bloku ayrılır. String tipli dəyişəndə mətn obyektinin ünvanı (referansı) saxlanır.

Şəkil 2. Tam ədədlərdən ibarət massiv yaddaşda necə yerləşir:

String tipi massiv yaddaşda

Bu da tanış bir şəkil.

Şəkil 3. Sətirlərdən ibarət massiv yaddaşda necə yerləşir:

String massiv yaddaşda necə yerləşir

Solda biz String[] tipli massiv-dəyişəni görürük (obyekt-massivin ünvanını saxlayır).

Ortada — String tipli obyekt-massiv.

Sağda isə hansısa mətnləri saxlayan obyekt-sətirlər.

String tipli obyekt-massivin hüceyrələrində sətirlərin mətnləri deyil, onların ünvanları saxlanılır (referanslar). Eynilə, String tipli dəyişənlərdə sətirlərin (mətn) ünvanları saxlanılır.

Hüceyrələri müqayisə edərkən bu faktı nəzərə alın:

String[] array = new String[10];
 array[1] = "Salam";
array[2] = array[1];
array[3] = new String("Salam");
// müqayisə edirik
array[1] == array[2];
array[1] == array[3];
array[1].equals(array[3]);
array[1].equalsIgnoreCase(array[3]);
10 sətirlik massiv yaradırıq

Dəyərləri massivin içərisinə yazırıq



true (referanslar eynidir)
false (referanslar fərqlidir)
true (sətirlər eynidir)
true (sətirlər yenə də eynidir)


3. Java-da massivlərin sürətli təşkili

Massivlər — çox faydalı bir şeydir, ona görə də Java tərtibatçıları onlarla işi maksimum sadə etməyə çalışıblar.

Və ilk növbədə etdikləri iş — massivlərin təşkili və ilkin dəyərlərin ona daxil olunmasını asanlaşdırmaq olub.

Axı çox zaman proqramın haradansa oxuduğu məlumatlardan əlavə, öz daxili məlumatlarına da ehtiyacı olur. Məsələn, bizə bütün ayların uzunluqlarını massivdə saxlamaq lazımdır. Bu kod necə görünə bilər:

int[] months = new int[12];
months[0] = 31; // yanvar
months[1] = 28; // fevral
months[2] = 31; // mart
months[3] = 30; // aprel
months[4] = 31; // may
months[5] = 30; // iyun
months[6] = 31; // iyul
months[7] = 31; // avqust
months[8] = 30; // sentyabr
months[9] = 31; // oktyabr
months[10] = 30; // noyabr
months[11] = 31; // dekabr

Amma bu kodu daha qısa yaza biləcəyimiz bir üsul var — təşəkkürlər Java yaradıcılarına:

// ilin aylarının uzunluqları
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Sadəcə massivdəki bütün dəyərləri vergüllə ayıraraq yazmaq kifayətdir!

Rahatdır, düzdür? Amma bununla iş bitmir.

Məlum olub ki, kompilyator massiv dəyişəninin növünə əsasən container (massiv obyekti) tipini təyin edə bilər. Və massiv uzunluğunu müəyyən etmək üçün isə sadəcə fiqurlu mötərizələrdə yazılmış elementlərin sayını hesablaya bilər.

Buna görə, bu kodu daha da qısa yazmaq olar:

// ilin aylarının uzunluqları
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Möhtəşəm deyil? 🙂

Bu yazı tərzi «massivin sürətli təşkili» adlanır. Ayrıca, bu yalnız int tipi üçün işləmir...

// ilin aylarının adları
String[] months = { "Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"};

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION