CodeGym /Kurslar /Java SELF AZ /Köməkçi Arrays sinfi

Köməkçi Arrays sinfi

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

1. Sinif Arrays

Daha öncə də dediyimiz kimi, massivlər proqramlaşdırmada çox faydalı və tez-tez istifadə olunan bir şeydir.

Java yaradanlar çox tez bir zamanda fərq etdilər ki, Java-proqramçılar massivlərlə işləyərkən tez-tez eyni kodu yazırlar. Məsələn: «massivin bir hissəsini başqa massivə kopyalamaq», «bütün massiv hüceyrələrini eyni dəyərlərlə doldurmaq», «massivin içindəkiləri ekran üçün rahat oxunan şəkildə göstərmək» və s.

Ona görə də onlar xüsusi bir sinif yaratdılar – Arrays (tam adı java.util.Arrays), hansına ki, massivlərlə işləyərkən ən məşhur əməliyyatları yerləşdirdilər.

Bu sinifdə həyatın hər vəziyyəti üçün bir çox metod var, amma əvvəlcə onlardan yalnız 10-nu – ən sadə və tez-tez istifadə olunanları nəzərdən keçirəcəyik.


2. Arrays.toString() Metodu

Və nəzər salacağımız ilk metod Arrays.toString() adlanacaq. Amma əvvəlcə bir az tarixçəyə baxaq.

Java-da hər bir massivdə toString() metodu var ki, o, "massivin mətn təsviri"ni qaytarır. Massivin mətn təsvirini bu cür bir konstruksiya ilə əldə edə bilərsiniz:

String str = ad.toString();

Burada ad — massiv dəyişəninin adı, str isə massivin mətn təsvirinin saxlanacağı dəyişənin adıdır.

Amma əgər siz System.out.println(ad) metodu ilə massivi ekrana çıxarmağa cəhd etsəniz, çox güman ki, bu tip bir şey görəcəksiniz:

I@37afeb11

Birinci hərf I bunun int tipli massiv olduğunu göstərir, simvollar isə @ işarəsindən sonra massivin yaddaşda saxlandığı yeri göstərir. Bir tərəfdən massiv dəyişəni məhz bu məlumatı saxlayır, digər tərəfdən isə biz fərqli bir şey gözləyirdik, elə deyilmi?

Massivin dəyərlərini görmək istəyirdik! Məhz massivin dəyərlərini görmək üçün Arrays.toString() metodu yaradılıb. Onun çağırışı belə görünür:

String str = Arrays.toString(ad);

Nümunələr:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
Dəyişən str aşağıdakı mətn dəyərinə sahib olacaq:
"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
Dəyişən str aşağıdakı mətn dəyərinə sahib olacaq:
"[]"
String[] array = {"Salam", "Necə", "Sən"};
String str = Arrays.toString(array);
Dəyişən str aşağıdakı mətn dəyərinə sahib olacaq:
"[Salam, Necə, Sən]"


3. Arrays.deepToString() metodu

Amma əgər siz Arrays.toString() metodundan istifadə edərək ikimərtəbəli massivləni (ekranda göstərmək) sətirə çevirmək istəsəz, tanış bir şey görəcəksiniz:

[I@37afeb11, I@37afeb21, I@37afeb31]

Məsələ burasındadır ki, ikimərtəbəli massivlərin hüceyrələrində təkmərtəbəli massivlərə olan istinadlar saxlanılır. Bəs təkmərtəbəli massivlər necə sətirə çevrilir? Məhz yuxarıda gördüyünüz kimi.

Bəs nə etməliyik? İkimərtəbəli massivi düzgün göstərmək üçün nə edə bilərik?

Bunun üçün Arrays sinfində başqa xüsusi bir metod var — deepToString(). Bu metodu belə çağırmaq olur:

String str = Arrays.deepToString(ad);

Bu metoda ikimərtəbəli, təkmərtəbəli, üçmərtəbəli hətta istənilən ölçüyə malik massiv göndərmək olar, və o həmişə massiv elementlərini düzgün göstərəcək.
Qeyd et: Arrays.deepToString() metodu təkmərtəbəli primitive massivlərlə (məsələn, int[]) işləmir.

Misallar:

Integer[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
Dəyişən str bu sətir dəyərini saxlayacaq:
"[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
Dəyişən str bu sətir dəyərini saxlayacaq:
"[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
Dəyişən str bu sətir dəyərini saxlayacaq:
"[[[1, 2, 3], [1]], [[]]]"


4. Arrays.equals() Metodu

Array-ları ekrana çıxarmağı öyrəndik, bəs onları müqayisə etmək necə?

Sətirləri müqayisə etmək üçün equalsequalsIgnoreCase metodlarımız vardı, bəs array-lar üçün hansı metodlar var?

Xoş xəbər: array-larda equals metodu var. Pis xəbər isə – bu metod array-ların içindəkiləri müqayisə etmir. equals metodu array-larda eynilə == operatorunun etdiyi işi görür – referansları müqayisə edir.

Nümunələr:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
boolean b = x1 == x2;


false (referanslar eyni deyil)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
Array-larda equals metodu sadəcə iki array-ın referanslarını müqayisə edir.

false (referanslar eyni deyil)

Bəs nə etməli? Array-ları içindəkilərə görə necə müqayisə edirik?

Burada köməyimizə Arrays sinfi gəlir, dəqiq desək, onun Arrays.equals() metodu. Onu belə çağırırsınız:

Arrays.equals(ad1, ad2)

Metod true (doğru) qaytarır, əgər array-ların uzunluğu eynidirsə və onların elementləri bir-birinə bərabərdirsə. Əks halda, false (yanlış) qaytarır.

Nümunələr:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
Array-larda equals metodu sadəcə iki array-ın referanslarını müqayisə edir.

false (referanslar eyni deyil)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true (array-ların içindəkilər bərabərdir)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false (array-ların içindəkilər fərqlidir)

5. Arrays.deepEquals() Metodu

Yəqin ki, artıq tahmin edirsiz, Arrays.equals metodu ikimərtəbəli massivlər üçün düzgün işləməyəcək: o, ikimərtəbəli massivi bir ölçülü kimi qəbul edir, hansının elementləri — bir ölçülü massivlərin ünvanıdır.

Bu səbəbdən çoxölçülü massivləri (n=1, 2, 3, ...) düzgün müqayisə etmək üçün Arrays.deepEquals() metodu yaradılıb. Çağırışı belə görünür:

Arrays.deepEquals(ad1, ad2)

Metod, massivlərin uzunluğu eynidirsə və onların elementləri bərabərdirsə true (doğru) qaytarır. Əks halda false (yanlış) qaytarılır. Əgər massivdəki elementlər də massivdirsə, onları müqayisə üçün yenə Arrays.deepEquals() metodu istifadə olunur və s.

Nümunələr:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
x1.equals(x2);
Massivlərin equals metodu sadəcə iki massivə aid referansları müqayisə edir.

false (referanslar fərqlidir)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
Arrays.equals(x1, x2);
Arrays.equals metodu x1x2-ni referansları saxlayan bir ölçülü massivlər kimi müqayisə edir. Referanslar fərqlidir.
false (massivlərin tərkibi bərabər deyil)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
Arrays.deepEquals(x1, x2);


true (massivlərin tərkibi bərabərdir)

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