CodeGym /Kurslar /Java SELF AZ /ArrayList ilə işləmək

ArrayList ilə işləmək

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

1. ArrayList-in quruluşu

ArrayList — Java-da elementləri saxlamaq üçün ən geniş yayılmış class-dır. Bəs bu ArrayList-in quruluşu necədir və niyə hamı onu bu qədər çox sevir?

ArrayList-in quruluşu çox sadə və mahiyyəti etibarilə dahiyanədir. Hər bir ArrayList obyektinin daxilində iki field var:

  • Elementlərin siyahısı olan massiv
  • Siyahının element sayını saxlayan size dəyişəni

ArrayList obyektinin daxilində adi bir massiv var! Amma yalnız bu deyil. Orada həmçinin siyahının uzunluğunu saxlayan size adlı dəyişən də var. Bu necə işləyir:

Əvvəlcə siyahının daxilindəki massiv 10 element uzunluğunda olur. size isə 0-a bərabərdir.

Əgər siyahıya element əlavə edilsə, həmin element massivdə 0-cı hücrəyə yazılacaq və size 1-ə qədər artırılacaq.

Daha bir element əlavə etsək, o, massivdə 1-ci hücrəyə yazılacaq, size yenə 1 artırılaraq artıq iki olacaq.

Əgər siyahıya növbəti elementi əlavə edərkən massivdə artıq yer yoxdursa, add() metodunun içində belə bir proses baş verir:

  1. yeni bir massiv yaradılır, əvvəlkindən 1.5 dəfə daha uzun
  2. oraya mövcud massivdən bütün elementlər kopyalanır
  3. ArrayList obyektində köhnə massiv əvəzinə yeni massivə bir link saxlanılır
  4. Yeni massivdə 10-cu hücrəyə ötürülən element yazılır
  5. size 1 artırılır və artıq 11 olur

Bənzər şəkildə, siyahının ortasına bir element əlavə edilərkən də proses gedir. Mövcud elementlər sağa 1 hücrə itələnir və uyğun hücrəyə lazım olan element yazılır.

İndi siyahıların istifadəsinin ən əsas ssenarilərinə baxacağıq:


2. Elementin ArrayList-ə əlavə edilməsi

Gəlin siyahıya elementlər əlavə olunanda, siyahının içində nələr baş verdiyini araşdıraq. ArrayList obyektini yaratdıqdan dərhal sonra yaddaşda təxminən belə bir görünüş olur:

Elementin ArrayList-ə əlavə edilməsi

Bizdə ArrayList tipli obyekt var, onun içində iki sahə (iki dəyişən) mövcuddur: massiv (data) və elementlərin sayı (size). data 10 elementdən ibarət konteynerin (massivin) linkini saxlayır.

Əgər biz massivə 5 rəqəmini əlavə etmək istəsək, vəziyyət belə olacaq:

Elementin ArrayList-ə əlavə edilməsi

Artıq massivdə 5 elementi saxlanılır, və size == 1 olur.

Əgər indi kimsə bizim ArrayList obyektimizdə size() metodunu çağırsə, o, siyahının elementlərinin sayını alacaq — 1. Siyahının elementlərinin sayı — massiv ölçüsü deyil.

Nə massiv ölçüsü, nə də massiv özü heç vaxt ArrayList obyektinin xaricində mövcud olmayacaq (görünməyəcək). Bunlar ArrayList-in daxili məlumatlarıdır və həmişə elə qalacaq.

Gəlin siyahıya daha 7 rəqəm əlavə edək: 10, 20, 30, 40, 50, 60, 70.

Onda yaddaşda vəziyyət belə olacaq:

Elementin ArrayList-ə əlavə edilməsi 2

Əgər indi size() metodunu çağıraqsa, o, 8 ədəd qaytaracaq — siyahıda yeni elementlərin sayı. Bunun massiv ölçüsünə heç bir aidiyyəti yoxdur.

Vacibdir:

Bu şəkildə bir səhv var.

ArrayList sinifi primitiv tipləri saxlaya bilmir, ona görə də int tipi əvəzinə Integer tipindən istifadə edir. Konteyner 5-70 qiymətlərini deyil, Integer tipindəki obyektlərə olan linkləri saxlayır. Konteynerdə boş olan bütün hüceyrələr null saxlayır.



3. Siyahının uzunluğunun artırılması

Gəlin siyahının daxilində nə baş verdiyini analiz edək, onun massivində boş yerlər qurtaranda.

Tutaq ki, bizdə 10 elementdən ibarət bir siyahı var idi:

Siyahının uzunluğunun artırılması

Biz qərara gəldik ki, ona 100 ədədini əlavə edək, bu zaman add() metodunda belə şeylər baş verəcək:

1-ci addım — yeni bir massiv yaradılması:

Siyahının uzunluğunun artırılması 1

2-ci addım — bütün elementlərin köhnə massivdən yenisinə kopyalanması:

Siyahının uzunluğunun artırılması

3-cü addım — massivlərin əvəzlənməsi (ArrayList obyektinin içindəki massivə olan linkin dəyişdirilməsi):

Siyahının uzunluğunun artırılması 3

4-cü addım — yeni ədədin əlavə edilməsi, bunun üçün biz çalışırdıq:

Siyahının uzunluğunun artırılması 4

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