JavaRush /Kurslar /All lectures for AZ purposes /Massivlərlə işin incəlikləri

Massivlərlə işin incəlikləri

All lectures for AZ purposes
Səviyyə , Dərs
Mövcuddur

1. Massivlər yaddaşda

Əvvəlki nümunələrdəki şəkillər bir az qeyri-dəqiq idi.

Massivlər yaradıldıqda (eləcə də sətirlər yaradıldıqda) yaddaşda iki blok ayrılır: biri massivi (konteyneri) saxlamaq üçün, digəri isə onun ünvanını saxlayan dəyişən üçün. Aşağıda təsvir edilən vəziyyət:

Massivlər yaddaşda

Yaşıl rəngdə int tipli 10 elementdən ibarət bir massiv və yaddaşda int tipli massiv ünvanını saxlayan int[] tipli dəyişən göstərilir.

Müqayisə üçün mavi rəngdə 199 dəyərini saxlayan adi int tipli dəyişən göstərilir.

Bu, bir az sətirlərin yaddaşda saxlanmasına bənzəyir, tapmırsınız?

Bəli, sətirlər. Və sətirlərlə işlədikcə, "massiv tipli dəyişənləri" bir-birinə təyin etmək mümkündür:

Kod İzah
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
10 elementi olan int tipli massiv yaratmaq.
İndeksi 2 olan xana 4 dəyərini yazır.
İndeksi 7 olan xana 9 dəyərini yazır.
b dəyişəninə a dəyişənində olan ünvanı saxlamaq.
İndi ab yaddaşda eyni obyekt-massivə işarə edir.
Massiv obyektinin 9-cu xanasına 2-ci xanasında saxlanılan 4 və 7-ci xanasında saxlanılan 9 dəyərlərinin cəmini yazır.

Bu zaman massiv obyekti olduğu yerdə qalacaq, lakin ab dəyişənləri eyni ünvanları (istinadları) saxlayacaqlar. Şəkilə baxın:

Massivlər yaddaşda 2

2. Massivlərlə daha ətraflı iş

Massivi istənilən tipdən yaratmaq olar. Bunun üçün tipin adından sonra kvadrat mötərizələr yazmaq lazımdır. Massivin yaradılmasının ümumi görünüşü belədir:

tip[] ad = new tip[miqdar];

Burada tip — massivin elementi (xanası), yəni birtipli elementlər saxlanacaq, ad isə massivə müraciət edəcəyimiz dəyişənin adı, miqdar isə massivin xanası sayıdır.

Yuxarıda göstərilmiş nümunədə kanonik forma göstərilib: massiv dəyişəni və massiv obyekti yaradılır. Lakin əslində bunlar müstəqil konstruksiyalardır.

Massiv dəyişəni və massiv obyektini ayrı-ayrılıqda yaratmaq olar:

tip[] ad;
ad = new tip[miqdar];

Bir də vacib bir məqam:

Massivin indeksielementlərin sayı kimi dəyişənlər və hətta bütöv ifadələr istifadə edilə bilər.

Nümunələr:

Kod İzah
int n = 100;
int[] a = new int[n];
n elementi ilə massiv yaratmaq
int n = 100;
int[] a = new int[n * 2 + 3];
203 elementdən ibarət massiv yaratmaq
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Vacibdir:
Qeyd edək ki, massivdə olmayan bir indeksi göstərərək xanasına müraciət etməyə çalışsanız (bizim halda bu 0..99 olmayan bütün tam ədədlərdir), proqram ArrayIndexOutOfBoundsException - indeks massivdən xaricdəsə səhv nəticəsində uğursuzluqla başa çatacaq.

3. Massivin uzunluğu

Əvvəlki nümunədə gördüyünüz kimi, massiv tipli dəyişəni ayrıca yarada və sonra ona haradasa kodda qiymət (obyekt-massiv üçün istinad) təyin edə bilərsiniz. Hətta bunu da etmək mümkündür:

Kod İzah
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
int[] tipli massiv dəyişəni yaratmaq
Əgər a dəyişəni 10-dan kiçikdirsə,
10 elementdən ibarət massiv yaratmaq.
Yoxsa
20 elementdən ibarət massiv yarat

Və belə massivlə necə işləmək olar? Necə bilmək olar, neçə elementi var?

Bunun üçün massivdə xüsusi bir xassə var – length. Massivin uzunluğunu belə bir ifadə ilə öyrənmək olar:

array.length;

Burada array - massiv dəyişənin adı, length isə massiv obyektinin xassəsinin adıdır. length xassəsinin dəyərini dəyişmək olmaz: length xassəsini digər dəyişənlərə təyin etmək olar, lakin ona heç nə təyin edilə bilməz (proqram sadəcə tərtib olunmaz).

Əvvəlki nümunəni belə davam etdirmək olar:

Kod İzah
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
} 
int[] tipli massiv dəyişənini yaratmaq
Əgər a dəyişəni 10-dan kiçikdirsə,
10 elementdən ibarət massiv yaratmaq.
Yoxsa
20 elementdən ibarət massiv yarat
Massivin bütün elementlərinin dövrü: 0-dan array.length — 1 qədər

4. Java-da massivlər haqqında faktları yekunlaşdırırıq

Massivlərlə bağlı məlum faktları yekunlaşdıraq:

Fakt 1. Massiv çox sayda xanalardan ibarətdir.

Fakt 2. Konkret xanaya çıxış onun nömrəsini göstərməklə əldə edilir.

Fakt 3. Bütün xanalarda eyni tip elementlər saxlanılır.

Fakt 4. Bütün xanalarda başlanğıc dəyər - 0 və null (xanada ünvan saxlanılırsa), false (tip boolean üçün). Əsas dəyərlər haqqında daha çox bu mühazirədə öyrənəcəksiniz.

Fakt 5. String[] list - bu sadəcə dəyişənin elanıdır: konteynerin özü(hələ massiv obyekti) yaradılmayıb. Onunla işləmək üçün əvvəlcə konteyneri yaratmaq və onu dəyişəndə saxlamalı, sonra isə ondan istifadə etmək lazımdır. Aşağıdakı nümunəyə baxın.

Fakt 6. Obyekt-massiv (konteyner) yaradaraq, onun uzunluğunu göstərmək lazımdır – neçə xana var. Bu, aşağıdakı komanda ilə edilir: new TypeName[n];

Fakt 7. Massivin uzunluğunu .length xüsusiyyətindən bilmək olar.

Fakt 8. Massiv yarandıqdan sonra nə elementlərinin tipi, nə də onların sayı dəyişdirilə bilməz.

Kod İzah
String s;
String[] list;
s null bərabərdir
list null bərabərdir
list = new String[10];
int n = list.length;
list dəyişəni 10 elementdən ibarət sətirlərdən ibarət massiv obyektinin istinadını saxlayır.
n 10 bərabərdir
list = new String[0];

İndi list 0 elementdən ibarət bir massivdən ibarətdir. Massiv var, lakin elementləri saxlaya bilmir.

list = null;
System.out.println(list[1]);
İstisna (proqram xətası) yaradılacaq - proqram qəza ilə sona çatacaq. list boş istinaddır - null
list = new String[10];
System.out.println(list[10]);
İstisna (proqram xətası) yaradılacaq - massivdən kənara çıxış.
Əgər list 10 element/ xana saxlayırsa, onların icazə verilən indeksləri: 0 1 2 3 4 5 6 7 8 9 - cəmi 10 ədəd.

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