CodeGym /Kurslar /JAVA 25 SELF /Collection, List, Set, Map interfeysləri: iyerarxiya

Collection, List, Set, Map interfeysləri: iyerarxiya

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. Collection interfeysi nədir

Java-da interfeys — sanki bir müqavilə kimidir: əgər sinif interfeysi reallaşdırırsa, onun bütün metodlarına reallaşdırma təqdim etməlidir. Interfeys özü-özlüyündə daxili vəziyyət saxlamır və kod ehtiva etmir (demək olar ki: Java 8-dən etibarən default metodlar mümkündür, amma indi əsas ideya önəmlidir).

Collection — Java-dakı kolleksiyaların çoxu üçün əsas interfeysdir. O, kolleksiyanın nə etməyi bacardığını müəyyənləşdirir: elementləri əlavə etmək, silmək, ölçüsünü öyrənmək, elementlərin mövcudluğunu yoxlamaq və s.

public interface Collection<E> extends Iterable<E> {
    int size();
    boolean isEmpty();
    boolean contains(Object o);
    boolean add(E e);
    boolean remove(Object o);
    void clear();
    Iterator<E> iterator();
    // ... və daha bir çox faydalı metodlar
}

Açar metodlar:

  • add(E e) — element əlavə etmək.
  • remove(Object o) — elementi silmək.
  • size() — elementlərin sayını öyrənmək.
  • isEmpty() — kolleksiyanın boş olub-olmadığını yoxlamaq.
  • contains(Object o) — elementin mövcudluğunu yoxlamaq.
  • clear() — kolleksiyanı təmizləmək.
  • iterator() — dövr etmə üçün iterator almaq.

Niyə Map Collection-dan miras almır?

Map kolleksiyalar arasında ayrıca dayanır. Çünki Map — sadəcə elementlər toplusu deyil, “açar → dəyər” cütlükləri toplusudur. Onun fərqli müqaviləsi və metod dəsti var. Məsələn, Map-də add metodu yoxdur, çünki əlavə etmə put(key, value) vasitəsilə edilir və açarı bilmədən dəyərin olub-olmadığını yoxlamağın mənası yoxdur.

2. Kolleksiyaların iyerarxiyası

Əsas interfeyslərin zehni “ağacı” belə görünür:

                Iterable
                   |
               Collection
               /    |    \
            List   Set   Queue
                          |
                        Deque
  • Iterable — ən əsas interfeys: for-each döngüsündə dövr edilə bilən hər şey.
  • CollectionIterable-i genişləndirir, elementlər kolleksiyası ilə işləmə əməliyyatları əlavə edir.
  • Üç əsas budaq:
    • List — nizamlı siyahı, dublikatlara icazə verir.
    • Set — unikal elementlər çoxluğu, sıra reallaşdırmadan asılıdır.
    • Queue — növbə (adətən FIFO); alt növ — Deque (iki tərəfli növbə).

Map isə ayrıca yaşayır:

                Map
               /   \
         HashMap  TreeMap

İyerarxiyanın vizuallaşdırılması (sxem)

                            +--------------------+
                            |     Iterable<E>    |
                            +--------------------+
                                     |
                            +--------------------+
                            |   Collection<E>    |
                            +--------------------+
                          /     |         \
                +--------+   +-------+   +-------+
                |  List  |   |  Set |   | Queue |
                +--------+   +-------+   +-------+
                                     |
                                  +------+
                                  |Deque |
                                  +------+

        +--------------------+
        |      Map<K,V>      |
        +--------------------+

3. List: dublikatları olan nizamlı kolleksiya

List — bu, aşağıdakı xüsusiyyətlərə malik kolleksiyadır:

  • Elementlərin sırası vacibdir (birinci, ikinci, üçüncü…).
  • Eyni elementlərə (dublikatlara) icazə verilir.
  • Elementi indekslə almaq (list.get(2)), əvəzləmək, istənilən yerə daxil etmək olar.

Reallaşdırma nümunələri: ArrayList — indekslə sürətli çıxış; LinkedList — ortada tez-tez əlavə/silmə üçün uyğundur.

import java.util.*;

List<String> shoppingList = new ArrayList<>();
shoppingList.add("Süd");
shoppingList.add("Çörək");
shoppingList.add("Pendir");
shoppingList.add("Çörək"); // Dublikatlara icazə verilir!

System.out.println(shoppingList.get(1)); // "Çörək"

List-in tipik metodları:

  • add(E e), add(int index, E e)
  • get(int index), set(int index, E e)
  • remove(int index), remove(Object o)
  • indexOf(Object o), lastIndexOf(Object o)

4. Set: unikal elementlər çoxluğu

Set — bu, aşağıdakı xüsusiyyətlərə malik kolleksiyadır:

  • Hər bir element unikal olmalıdır (dublikat yoxdur).
  • HashSet-də saxlanma sırası zəmanətli deyil, TreeSet-də sıralama, LinkedHashSet-də isə əlavəetmə sırası ola bilər.

Reallaşdırma nümunələri: HashSet, TreeSet, LinkedHashSet.

import java.util.*;

Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("Anya");
uniqueNames.add("Boris");
uniqueNames.add("Anya"); // Əlavə olunmayacaq — artıq var!

System.out.println(uniqueNames.contains("Anya")); // true
System.out.println(uniqueNames.size()); // 2

Set-in tipik metodları:

  • add(E e), remove(Object o)
  • contains(Object o)
  • size(), isEmpty()

5. Map: açar-dəyər cütlükləri kolleksiyası

Map — bu, aşağıdakı xüsusiyyətlərə malik kolleksiyadır:

  • Hər element — açar → dəyər cütüdür.
  • Açarlar unikal olur, dəyərlər təkrarlana bilər.
  • Açarla sürətli çıxış.

Reallaşdırma nümunələri: HashMap, TreeMap, LinkedHashMap.

import java.util.*;

Map<String, String> phoneBook = new HashMap<>();
phoneBook.put("Anya", "+19991112233");
phoneBook.put("Boris", "+19994445566");
phoneBook.put("Anya", "+19990001122"); // Anyanın nömrəsini yenidən yazacaq!

System.out.println(phoneBook.get("Anya")); // "+19990001122"
System.out.println(phoneBook.containsKey("Boris")); // true

Map-in tipik metodları:

  • put(K key, V value), get(K key)
  • remove(K key)
  • containsKey(K key), containsValue(V value)
  • keySet(), values(), entrySet()

6. İyerarxiyanın vizuallaşdırılması: hamısı bir şəkildə

Kiçik bir xülasə cədvəli:

İnterfeys Təsvir Reallaşdırma nümunələri Açar xüsusiyyətlər
List
Nizamlı siyahı
ArrayList, LinkedList
İndekslə çıxış, dublikatlar
Set
Unikal elementlər toplusu
HashSet, TreeSet
Yalnız unikal elementlər
Map
Açar-dəyər cütləri
HashMap, TreeMap
Açarlar unikal, dəyərlər istənilən

Sxemdə iyerarxiya:

                Collection
                /    |    \
             List   Set   Queue
                            |
                          Deque

                Map (ayrıdır)

7. Hansı interfeysi nə vaxt istifadə etməli

List

  • Elementlərin sırası vacib olduqda (məsələn, istifadəçi hərəkətlərinin tarixi).
  • Dublikatlar lazım olduqda (məsələn, sifarişin maddələri).
  • İndekslə sürətli çıxış/əvəzləmə lazım olduqda.

Set

  • Unikallıq tələb olunduqda (email, loginlər, ID).
  • Sıra vacib olmadıqda və ya əksinə — avtomatik sıralanan toplu lazım olduqda (TreeSet).

Map

  • Açarları dəyərlərlə uyğunlaşdırmaq lazım olduqda (ID → obyekt, login → profil).
  • Açar üzrə sürətli axtarış lazım olduqda.
  • Açarlar unikal olmalı, dəyərlər isə olmaya da bilər.

8. Kolleksiya iyerarxiyası ilə işləyərkən tipik səhvlər

Səhv № 1: Dəyişən elanında yanlış interfeysdən istifadə. Əgər siz ArrayList<String> list = new ArrayList<>(); yazırsınızsa, reallaşdırmaya bərk bağlanırsınız. Daha məqsədəuyğun olanı List<String> list = new ArrayList<>(); — beləliklə reallaşdırmanı dəyişmək asandır.

Səhv № 2: Set-ə dublikat əlavə etməyə cəhd edib, onların görünəcəyini gözləmək. Bu, xəta deyil, xüsusiyyətdir: Set tərifcə dublikat saxlamır. Təkrar daxil etmə nəzərə alınmır.

Səhv № 3: Map-dən adi kolleksiya kimi istifadə. Map — nə siyahıdır, nə də çoxluq. Dövr etmək üçün keySet(), values() və ya entrySet() istifadə edin.

Səhv № 4: HashSet və ya HashMap-də sıra gözləmək. HashSetHashMap sıralamaya zəmanət vermir. Sıra vacibdirsə — LinkedHashSet və ya LinkedHashMap götürün.

Səhv № 5: Unikal elementlər üçün List-dən istifadə. Unikallıq lazımdırsa — Set istifadə edin. List dublikatların qarşısını almır.

1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Palitradan rəngin axtarılması 🎨
Palitradan rəngin axtarılması 🎨
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Oyunda inventarın izlənməsi 🎮
Oyunda inventarın izlənməsi 🎮
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION