CodeGym /Kurslar /Java SELF AZ /Massivlərlə işin incəlikləri

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

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

1. Massivlərin yaddaşda saxlanması

Keçmiş nümunələrdəki şəkillər bir qədər dəqiq deyildi.

Massivlər yaradılan zaman (eləcə də sətirlər yaradılan zaman) yaddaşda iki blok ayrılır: biri massivin (konteynerin) özünü saxlamaq üçün, digəri isə onun ünvanını saxlayan dəyişəni saxlamaq üçün. Daha dəqiq vəziyyət aşağıdakı şəkildə göstərilib:

Massivlərin yaddaşda saxlanması

Yaşıl rənglə 10 elementdən ibarət olan int tipli massiv və yaddaşda int tipli massiv üçün ünvan (referans) saxlayan int[] tipli dəyişən göstərilib.

Müqayisə üçün mavi rənglə 199 dəyərini saxlayan sadə int tipli dəyişən göstərilib.

Bunun sətirlərin yaddaşda saxlanmasına bənzəmədiyini düşünmürsünüz?

Düzdür, sətirlər kimi. Eləcə də massiv tipli dəyişənlər bir-birinə mənimsədilə bilər:

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

a[9] = b[2] + a[7];
10 elementdən ibarət int tipli massiv yaradırıq.
2 indeksli hüceyrəyə 4 dəyərini yazırıq.
7 indeksli hüceyrəyə 9 dəyərini yazırıq.
b dəyişəninə a dəyişənindəki ünvanı mənimsədirik.
İndi ab yaddaşda eyni obyektə-massivə işarə edir.
Massiv obyektinin 9 indeksli hüceyrəsinə, 2 indeksli hüceyrədəki dəyər (4) ilə 7 indeksli hüceyrədəki dəyərin (9) cəmini yazırıq.

Eyni zamanda massiv obyekti olduğu yerdə qalacaq, ab dəyişənləri isə yaddaşda eyni obyektə (massivə) aid olan ünvanı saxlayacaq. Şəkilə baxın:

Massivlərin yaddaşda saxlanması 2

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

Massiv istənilən tipdən yaradılıb istifadə edilə bilər. Bunun üçün sadəcə tip adından sonra kvadrat mötərizələr yazmaq lazımdır. Massivin yaradılmasının ümumi görünüşü belə olacaq:

tip[] ad = new tip[say];

Burada tip — massivdə saxlanacaq elementlərin (hüceyrələrin) tipi, ad — massivə müraciət üçün istifadə olunan dəyişənin adı, say isə massivdəki hüceyrələrin sayıdır.

Yuxarıdakı nümunədə kanonik forma təqdim olunub: massiv dəyişənin yaradılması və massiv obyektinin yaradılması. Əslində, bunlar iki ayrı konstrukdur.

Massiv dəyişəni və massiv obyektini ayrı-ayrılıqda yaratmaq mümkündür:

tip[] ad;
ad = new tip[say];

Və daha bir vacib məqam:

Massiv indekslərimassiv elementlərinin sayı kimi dəyişənlər və hətta tam ifadələr istifadə oluna bilər.

Nümunələr:

Kod İzah
int n = 100;
int[] a = new int[n];
n elementdən ibarət massiv yaradılması
int n = 100;
int[] a = new int[n * 2 + 3];
203 elementdən ibarət massiv yaradılması
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:
Ayrıca qeyd etmək istərdik ki, əgər sizi massivdə olmayan indekslə massiv hüceyrəsinə müraciət etməyə çalışarsınızsa (bizim misalda bu ədədlər 0..99 aralığında deyil), proqram ArrayIndexOutOfBoundsException səhvi ilə qəza edəcək.

3. Massivin uzunluğu

Əvvəlki nümunədə gördüyünüz kimi, ayrıca massiv tipli dəyişən yarada və sonra kodda ona dəyər (massiv obyektinə istinad) təyin edə bilərsiniz. Hətta belə etmək olar:

Kod İzah
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Massiv dəyişəni int[] tipində yaradılır
a dəyişəni 10-dan kiçikdirsə,
10 elementdən ibarət massiv yaradılır.
Əks halda
20 elementdən ibarət massiv yaradılır.

Belə massivlə necə işləmək olar? Necə bilmək olar ki, orda neçə element var?

Bunun üçün massivdə xüsusi bir property (dəyişən) mövcuddur — length. Massivin uzunluğunu bu ifadə ilə bilmək olar:

array.length;

Burada array — massiv dəyişənin adı, length isə massiv obyektinin property-sinin adıdır. length property-nin qiymətini dəyişmək olmaz: length property-ni başqa dəyişənlərə təyin etmək olar, amma ona heç nə təyin etmək olmaz (proqram sadəcə kompilyasiya olunmayacaq).

Öncəki nümunəni bu cür 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]);
} 
Massiv dəyişəni int[] tipində yaradılır
a dəyişəni 10-dan kiçikdirsə,
10 elementdən ibarət massiv yaradılır.
Əks halda
20 elementdən ibarət massiv yaradılır.
Massivin bütün elementlərini dövr etmək: 0-dan başlayaraq array.length — 1 uzunluğa qədər

4. Java'da array'lər haqqında faktları ümumiləşdirək

Gəlin array'lər haqqında məlum faktları ümumiləşdirək:

Fakt 1. Array bir çox hücrədən ibarətdir.

Fakt 2. Konkret bir hücrəyə giriş üçün onun nömrəsini göstərmək lazımdır.

Fakt 3. Bütün hücrələr bir növdədir.

Fakt 4. Bütün hücrələr üçün başlanğıc dəyəri — 0 və null (əgər hücrədə address saxlanırsa), false (boolean tipi üçün). Varsayılan dəyərlər haqqında daha çox məlumatı bu mühazirədə tapa bilərsiniz.

Fakt 5. String[] list – sadəcə bir dəyişənin elanıdır: özündə konteyner (obyekt-array) hələ yaradılmamışdır. Onunla işləmək üçün əvvəlcə array (konteyner) yaradılmalı və həmin dəyişənə təyin olunmalıdır, daha sonra isə ondan istifadə edilə bilər. Aşağıdakı nümunəyə baxın.

Fakt 6. Biz obyekt-array (konteyner) yaradanda onun uzunluğunu - neçə hücrədən ibarət olduğunu göstərməliyik. Bu aşağıdakı əmrlə edilir: new TypeName[n];

Fakt 7. Array'in uzunluğunu .length xüsusiyyəti vasitəsilə öyrənmək olar.

Fakt 8. Array yaradıldıqdan sonra onun elementlərinin növünü və ya sayını dəyişmək mümkün deyil.

Kod İzah
String s;
String[] list;
s null-lə bərabərdir
list null-lə bərabərdir
list = new String[10];
int n = list.length;
list dəyişəni 10 elementdən ibarət string array'ə istinadın saxlayır.
n 10-a bərabərdir.
list = new String[0];

İndi list 0 elementdən ibarət array saxlayır. Array mövcuddur, amma elementləri saxlaya bilmir.

list = null;
System.out.println(list[1]);
İstisna (proqram xətası) generasiya olunacaq — proqram qəza ilə bitəcək. list boş istinad saxlayır — null
list = new String[10];
System.out.println(list[10]);
İstisna (proqram xətası) generasiya olunacaq — array həddini aşmaq.
Əgər list 10 element/hücrədən ibarətdirsə, onların icazə verilən indeksləri: 0 1 2 3 4 5 6 7 8 9 — cəmi 10 ədəddir.

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