CodeGym /Kurslar /Java SELF AZ /Java-da Kolleksiyalar: ArrayList

Java-da Kolleksiyalar: ArrayList

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

1. Sinif ArrayList

Bu gün ArrayList sinfini öyrənəcəyik. Bu, belə deyək, kolleksiyalardan ilk sinifimizdir. Java-da kolleksiyalar o qədər geniş və faydalı mövzudur ki, CodeGym-da ona tam bir tapşırıq həsr olunub.

Kolleksiyaların necə qurulduğunu və onların iş prinsiplərini tam başa düşmək üçün əvvəlcə OOP, interfeyslər, irsi, çoxsahəliliyin əsaslarını və daha çoxunu öyrənmək lazımdır.

Buna görə də, bu gün sadəcə ən sadə kolleksiya ilə tanış olacağıq. Amma kifayət qədər dərindən öyrənəcəyik ki, necə işlədiyini və ondan necə istifadə ediləcəyini başa düşəsiniz. Beləliklə, qarşılayın: ArrayList kolleksiyası.

Bir az tarixçə

Kiçik bir tarixçə ilə başlayaq. Proqramçıları çox narahat edən bir şey var idi — massivlərin ölçüsünü dəyişmək mümkün deyildi. Əgər massivə daha üç element əlavə etmək lazım olsa, amma boş yer sadəcə bir dənə olsa, nə etməli?

Massivdə boş yerin çatışmazlığı probleminin yeganə həlli çox böyük ölçüdə bir massiv yaratmaq idi ki, bütün elementlər ora yerləşsin. Amma bu, tez-tez yaddaşın səmərəsiz istifadəsinə gətirib çıxarırdı. Adətən massivdə iki-üç element saxlanırdı, amma ən kiçik ehtimal olsa belə, orada 100 element ola biləcəyi üçün 100 elementlik massiv yaratmaq lazım gəlirdi.

Bəs proqramçılar nə fikirləşdi? Onlar ArrayList (massiv siyahısı) sinfini yaratdılar, hansı ki, Array (massiv) ilə eyni işi görürdü, amma ölçüsünü dəyişə bilirdi.

ArrayList Sinfi

ArrayList adı iki sözün birləşməsindən gəlir: Array + List. Array — massivdir, List — siyahıdır.

Hər bir ArrayList obyektinin içində adi bir massiv saxlanılır. Elementləri ArrayList-dən oxuduğunuzda o, daxili massivindən oxuyur. Yazdığınız zaman isə onları daxili massivinə yazır.

ArrayList sinfində massivlərin bütün çatışmazlıqları mövcud deyil. O, bacarır:

  • Müəyyən tipdə elementləri saxlamaq
  • Siyahının ölçüsünü dinamik olaraq dəyişmək
  • Elementləri siyahının sonuna əlavə etmək
  • Elementləri siyahının əvvəlinə və ortasına əlavə etmək
  • İstənilən yerdən elementləri silmək

Ətraflı məlumat aşağıda:


2. ArrayList obyektinin yaradılması

ArrayList sinfinin obyektini yaratmaq üçün aşağıdakı kimi kod yazmaq lazımdır:

ArrayList<Tip> ad = new ArrayList<Tip>();

Burada ArrayList — kolleksiya üçün tip/sinifdir, TipArrayList kolleksiyasının saxladığı elementlərin tipi, ad isə ArrayList<Tip> tipində dəyişənin adıdır.

ad dəyişənin tipi mürəkkəbdir — iki tipdən ibarətdir: əvvəlcə kolleksiyanın tipi göstərilir, sonra üçbucaq mötərizələrində həmin kolleksiyanın saxladığı elementlərin tipi göstərilir.

Nümunələr:

Kod Təsvir
ArrayList<Integer> list = new ArrayList<Integer>();
Tam ədədlərin siyahısı
ArrayList<String> list = new ArrayList<String>();
Sətirlərin siyahısı
ArrayList<Double> list = new ArrayList<Double>();
Həqiqi ədədlərin siyahısı

Kolleksiyalar, massivlərdən fərqli olaraq, primitiv tipləri saxlaya bilmir: yalnız sinif tipləri saxlaya bilir. Ona görə də, əgər sizə int tipində kolleksiya lazımdırsa, bunun yerinə oborta tipdən — Integer istifadə edin.


3. ArrayList ilə əməliyyatlar

İlk yaradılan siyahının uzunluğu sıfıra bərabərdir: siyahı 0 elementdən ibarətdir. Siyahıya bir element əlavə etsək, onun uzunluğu 1 vahid artacaq. Əgər əlavə olunan elementi silsək, siyahının uzunluğu yenidən sıfıra enəcək.

ArrayList sinfinin metodları haqqında daha ətraflı məlumatı cədvəldən əldə edə bilərsiniz:

Metodlar Təsvir
void add(tip value)
Siyahıya ötürülmüş elementi əlavə edir
void add(int index, tip value)
Elementi siyahının müəyyən bir mövqeyinə əlavə edir.
tip get(int index)
index nömrəsi altında olan elementi qaytarır
void set(int index, tip value)
index nömrəsinə sahib elementin dəyərini value ilə əvəz edir
tip remove(int index)
index nömrəsi altındakı elementi silir. Silinmiş elementi qaytarır.
boolean remove(tip value)
Elementi silir: siyahıya elementi birbaşa vermək lazımdır. Əgər belə elementlər bir neçə dənə varsa, birincisi silinəcək.
void clear()
Siyahını təmizləyir — siyahıdakı bütün elementləri silir.
boolean contains(tip value)
Siyahıda value elementi olub-olmadığını yoxlayır.
boolean isEmpty()
Siyahının boş olub-olmadığını yoxlayır. Siyahının uzunluğu sıfıra bərabərdir ya yox.
int size()
Siyahının ölçüsünü qaytarır — siyahıdakı elementlərin sayını qaytarır.
tip[] toArray(tip[] array)
Siyahı ilə eyni elementləri saxlayan bir massiv qaytarır.
Metoda massiv ötürmək lazımdır.

Bu metodlar siyahı ilə demək olar ki, bütün mümkün əməliyyatları yerinə yetirməyə imkan verir: elementləri yerləyişdirmək, elementləri əlavə etmək, elementləri silmək. Hətta bir əmrlə siyahını təmizləmək və ya siyahını bir massiva çevirmək olar.



4. ArrayList ilə Array müqayisəsi

Düşünürəm ki, ArrayList ilə massiv(aranq) müqayisə etmədən keçinə bilməyəcəyik.

Əslində massivdə cəmi 4 əməliyyat var:

  • Massiv yaratmaq
  • Elementi nömrə ilə əldə etmək
  • Elementi nömrə ilə dəyişmək
  • Massivin uzunluğunu əldə etmək

Bu əməliyyatların massivArrayListdəki ekvivalentləri belədir:

Massiv ArrayList
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Salam";
list.set(0, "Salam");
int count = array.length;
int count = list.size();

Gəlin ArrayList ilə massivlər üzərində iş prosesini müqayisə edək. Məsələn, belə bir tapşırıq həll edək: "klaviaturadan 10 sətir daxil edin və onları əks istiqamətdə ekranda göstərin".

Massivdən istifadə ArrayList-dən istifadə
Scanner console = new Scanner(System.in);

// klaviaturadan sətirlərin daxil edilməsi
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// massivdəki məlumatların ekranda göstərilməsi
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// klaviaturadan sətirlərin daxil edilməsi
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// kolleksiyadakı məlumatların ekranda göstərilməsi
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

Prinsipcə, aydın analoji müqayisə aparmaq olar. Massivdə hər şey daha qısa və sadə kimi görünür. Amma ArrayList-də də elə xüsusi çətinlik yoxdur: elementi əldə etmək — get() metodu, elementi dəyişmək — set() metodu, siyahının uzunluğunu əldə etmək — size() metodu.

Bəs proqramçılar nə üçün ArrayList sinifindən istifadə edirlər?

Təbii ki, məsələ massivlərdə olmayan və olmayacaq digər metodlardadır:

  • Siyahıya element əlavə etmək
  • Siyahının ortasına element daxil etmək
  • Elementi siyahıda axtarmaq
  • Siyahıdan elementi silmək

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