1. Konteynerlər və kolleksiyalar
Konteynerlər və ya kolleksiyalar çoxlu obyektləri birdən saxlamağa və işlətməyə imkan verən siniflər adlanır. Artıq siz konteynerlərin iki növünü — massivləri və siyahıları bilirsiniz.
Java-da bir neçə onlarla kolleksiya var, hər biri elementləri özünəməxsus şəkildə saxlayır. Onlardan bəziləri:
Kolleksiya növü | Sinif | Təsvir |
---|---|---|
|
|
Siyahı |
|
Zəncirvari siyahı | |
|
Vektor | |
|
Stek (stack) | |
|
|
Cəm (gövdə) |
|
||
|
||
|
|
Növbə |
|
||
|
|
Xəritə/Sözlük |
|
||
|
Adlarla bağlı bəzi qeyri-müəyyənliklər var. Hərçənd ki, proqramlaşdırma dillərinin çoxunda bu bütün məlumat strukturları kolleksiya adlanır, Java-da bu belə deyil. Java dilində bu siniflərdən bəziləri Collection
interfeysini həyata keçirir, digərləri isə yox.
Ona görə də kolleksiyalar geniş mənada və dar mənada kolleksiyalara bölünüb (yalnız Collection
interfeysini həyata keçirənlər).
Buna görə də çaşqınlıqdan qaçmaq üçün kolleksiyalar yalnız dar mənadakı kolleksiyaları (siniflər Collection
interfeysini həyata keçirməli) adlandırılır. Bunlar List
, Set
və Queue
tipli kolleksiyalardır. Geniş mənadakı kolleksiyalar isə konteynerlər adlanır. Onlara Map
və massivlər kimi siniflər daxildir.
2. HashSet
Kolleksiyası
HashSet
sinifi "cəm" tipli kolleksiyaların tipik nümayəndəsidir. O çox baxımdan ArrayList
sinifinə oxşayır və müəyyən mənada onun daha primitiv versiyasıdır.
HashSet
tipində obyekt yaratmaq üçün aşağıdakı komanda istifadə olunur:
HashSet<Tip> ad = new HashSet<Tip>();
Burada tip — kolleksiya HashSet
-də saxlanılan elementlərin tipidir.
HashSet
sinifində belə metodlar mövcuddur:
Metod | Təsvir |
---|---|
|
Elementi value kolleksiyaya əlavə edir |
|
Elementi value kolleksiyadan silir.true qaytarır, əgər belə element varsa |
|
Kolleksiyada value elementi olub-olmadığını yoxlayır |
|
Kolleksiyanı təmizləyir: bütün elementləri silir |
|
Kolleksiyadakı elementlərin sayını qaytarır |
Kolleksiyadan istifadəyə nümunə.
Gəlin bir proqram yazaq ki, istifadəçi onunla salamlaşanda vidalaşsın: əgər istifadəçi "salam" dedisə. Daha maraqlı etmək üçün "salam" bir neçə dildə deyilə bilər.
Kod | Qeyd |
---|---|
|
HashSet tipində obyekt yaradırıq, hansı ki elementləri String tipində saxlayır.set -ə müxtəlif dillərdə salam ifadələri əlavə edirik.Konsoldan söz daxil edirik, əgər bu söz bizim salam ifadələri kolleksiyamızda varsa, vidalaşırıq. |
3. Cəm
Set
kolleksiyası elementlərin cəmini saxlamaq üçün yaradılmışdır. Buna görə də ona Set
(cəm) deyilir. Bu kolleksiyanın üç xüsusiyyəti var.
Cəm üzərində əməliyyatlar
Cəm ilə yalnız üç əməliyyat etmək olar: cəmə element əlavə etmək, cəmdən elementi çıxarmaq və müəyyən elementin cəmdə olub-olmadığını yoxlamaq. Hamısı bu qədər.
Sıranın olmaması
Bu kolleksiyanın elementlərinin nömrələri yoxdur. Elementi indeksə görə əldə etmək və ya indeksə görə kolleksiyaya dəyər yazmaq olmaz. Cəmdə get()
və set()
metodları yoxdur.
Elementlərin unikal olması
Cəmin bütün elementləri unikaldır. Siyahıdan fərqli olaraq, cəmdə bir element yalnız bir dəfə ola bilər. Obyekt ya cəmdədir, ya da deyil: üçüncü variant yoxdur. "Rənglər cəminə" üç dəfə "qara rəngi" əlavə etmək olmaz. Ya o oradadır, ya da yoxdur.
Elementlərin axtarışı
Cəmə yeni element əlavə etdiyiniz zaman, elementi sildiyiniz zaman və ya elementin olub-olmadığını yoxladığınız zaman, metodun daxilində elementin axtarışı həyata keçirilir. Kolleksiya elementləri və ötürülən element əvvəlcə hashCode()
ilə müqayisə olunur, əgər hashCode()
uyğun gəlirsə, equals
ilə müqayisə olunur.
4. Kolleksiyaların müqayisəsi: List
vs Set
Gəlin iki növ kolleksiyanı müqayisə edək: List
və Set
. Onların əsas fərqləri nədir və nə vaxt biri daha faydalıdır, nə vaxt isə digəri.
Gəlin Siyahı və Cəmi uşaqların oyuncaqları misalında müqayisə edək.
List
(Siyahı) Kolleksiyası uşaq otağında divarın yanında duran oyuncaq dəstinə bənzəyir. Siyahının sonuna oyuncaq əlavə etmək olar. Çox ehtiyac varsa, ortasına da əlavə etmək olar (amma bəzi oyuncaqları yerindən tərpətmək lazım olacaq).
Hər oyuncaqın sıravi nömrəsi var. Oyuncağı nömrəsinə görə götürmək və ya nömrəsi 7 olan oyuncağı nömrəsi 13 olan bir oyuncaqla əvəz etmək olar. Siyahıdan nömrəsi 4 olan oyuncağı silmək də mümkündür. Və nəhayət, siyahıdakı bütün oyuncaqların sayını öyrənmək olar.
Set
(Cəm) Kolleksiyası isə daha çox bir yerə yığılmış oyuncaq yığınına bənzəyir. Oyuncaq yığınına oyuncaq əlavə etmək, oyuncaq yığından bir oyuncaq çıxarmaq mümkündür. Amma belə oyuncaqların təsdiq edilmiş nömrəsi yoxdur.
Və ya tutaq ki, uşağa ad günü üçün oyuncaq seçirsiniz. O zaman ilk olaraq düşünürsünüz ki, bu oyuncağı onun artıq var, ya yoxdur. Onda, onun artıq sahib olduğu bütün oyuncaqlar, sizin almamaq qərarı verdiyiniz oyuncaqların cəmini təşkil edir.
Bu baxımdan «artıq var» dəstindəki oyuncaqların sırası əhəmiyyətli deyil, beləliklə də, ad günü olan uşağın iki eyni oyuncağa malik olması da əhəmiyyət daşımır. Sizi maraqlandıran nə oyuncaqların sayıdır, nə də özü, sadəcə olaraq unikal obyektlərdən ibarət bir dəstdir.
Belə hallarda sizə Set
cəmi və onun ən məşhur nümayəndəsi olan HashSet
sinfi lazım olacaq.
GO TO FULL VERSION