Java Data Strukturları — List, Set və Map arasındakı fərqlər

Alqoritm və Data Strukturları nədir?

Proqramlaşdırmada tez-tez Algorithm və Data Structure ilə rastlaşırıq. Bəs görək bunlar nə deməkdir və nə üçün lazımdır.

Alqoritm problemin həlli və ya tapşırığın yerinə yetirilməsi üçün təlimatlar toplusudur. Yəni problemi necə həll edəcəyimiz barəsində addımların ardıcıllığıdır. Alqoritmlər data-lar üzərində əməliyyatları həyata keçirməyə imkan yaradır.

Data Struktur yaddaşda məlumatların (data) təşkili və saxlanması üçün xüsusi bir vasitədir ki, biz saxlanılan data üzərində əməliyyatları daha səmərəli yerinə yetirə bilək.

Collections Framework Java-da data strukturlarının həyata keçirilməsini təmin edir.

Şəkildə class və interface-lər qeyd olunub. Gəlin əvvəlcə görək class və interface arasındakı fərqlər nədən ibarətdir. Bunlar OOP (obyekt-yönümlü proqramlaşdırma) anlayışlarıdır və OOP geniş mövzudur. Qısaca olaraq class və interface arasında fərqlərə baxaq.

Əgər abstract class deyilsə, class-dan object alına bilər. Class class-dan extend oluna bilər, interface-ləri isə implement edə bilər. Implement edən zaman interface-də olan default method-lar Override olunacaq.

Interface ancaq interface-dən extend oluna və yalnız class-a implement oluna bilər.

Şəkildə qeyd olunmayıb lakin Collection interface-i Iterable interface-dən extend edir. Buna görə də Collection interface-nin bütün alt interface-ləri Iterable interface-dən extend etmiş olur. Başqa sözlə desək Iterable interface-i (java.lang.Iterable) Java Collection (java.util.Collection) class-ların (interface-lərin) root interface-idir.

Şəkildən göründüyü kimi Map Collection interface-dən extend olunmayıb və List, Queue, Set-dən fərqli olmasının səbəbi odur ki Map Iterable deyil. Yəni Map key, value cütlüyündən istifadə edir, lakin Collection alt interface-ləri isə ancaq value-lərdən.

Data Strukturları çox geniş movzudur, bu məqalədə biz List, Set və Map arasındakı fərqlərə nəzər salacağıq.

List nədir

List interface-i (java.util.List) sıralı obyektlər ardıcıllığıdır. List-də elementlər sıraya uyğun olaraq daxil edilə, əldə edilə, təkrarlana və silinə bilər.

package list;

import java.util.ArrayList;
import java.util.List;

public class ListExample {
public static void main(String[] args) {
List<String> bookNames = new ArrayList<>();

bookNames.add("Outliers");
bookNames.add("The Alchemist");
bookNames.add("What Men Live By");
bookNames.add(null);//istənilən sayda null dəyər əlavə etmək olar.
bookNames.add(4,"Removeble");
bookNames.add(null);

for (String book : bookNames)
System.out.println(book);

System.out.println(bookNames.get(1));

bookNames.remove(4);
System.out.println(bookNames);

bookNames.clear();
}
}

 

Set nədir?

Set java.util.Set ilə List arasında oxşarlıqlar mövcuddur. Hər iki interface elementlərdən təşkil olunub.

 

package set;

import java.util.HashSet;
import java.util.Set;

public class SetExample {
public static void main(String[] args) {
Set<String> writers = new HashSet<>();

writers.add("Malcolm Gladwell");
writers.add("Paulo Coelho");
writers.add("Removable");
writers.add("Leo Tolstoy");

for (String writer : writers)
System.out.println(writer);

writers.remove("Removable");
System.out.println(writers);

writers.clear();
}
}

 

Map nədir?

Map interface-i java.util.Map açar/dəyər (key/value) cütlüklərindən təşkil olunur. Hər açar məxsusi dəyərə bağlıdır və yaddaşda belə saxlanılır. Map-da açar vasitəsilə get(key) dəyərləri əldə etmək mümkündür. Əgər biz açarları 0-dan başlayaraq tam ədədlər seçsək, o halda List-dəki kimi açarları index kimi təyin etdiyimiz üçün Map ilə List oxşarlıq göstərəcək.

 

package map;

import java.util.HashMap;
import java.util.Map;

public class MapExample {
public static void main(String[] args) {
Map<String,String> books = new HashMap<>();

books.put("Malcolm Gladwell","Outliers");
books.put("Paulo Coelho","The Alchemist");
books.put("Leo Tolstoy","What Men Live By");
books.put("Removeble",null);
books.put(null,null);
books.put(null,null);

System.out.println(books.get("Leo Tolstoy"));//açar vasitəsilə dəyərin əldə edilməsi

for (Map.Entry<String,String> entry : books.entrySet())
System.out.println(entry.getKey() + " - " + entry.getValue());

books.remove("Removeble");
System.out.println(books);

books.clear();
}
}

List, Set və Map arasındakı fərqlər:

  1. List interface-i təkrarlanan elementlərə icazə verir, Set, Map isə icazə vermir.
  2. List-də daxiletmə sırası olur, yəni hər daxil edilən dəyərə uyğun unikal indekslə yaddaşda saxlanır, Set, Map-da isə daxiletmə sırası olmur.
  3. List-ə istənilən sayda null value əlavə etmək mümkündür. Set-də yalnız bir dəfə mümkün ola bilər. Map-da isə yalnız bir null key və keyləri fərqli olmaqla istənilən sayda value ola bilər.
  4. List interface-ni ArrayList, LinkedList, Vector class-ları implement edir. Set interface-ni HashSet, LinkedHashSet, TreeSet class-ları implement edir. Map interface-ni isə HashMap, HashTable, TreeMap, LinkedHashMap class-ları implement edir.
  5. List interface-inin get(index)metodu vasitəsilə hansı bir elementini indeksinə uyğun çağırmaq olar. Lakin Set, Map-da bu mümkünsüzdür.
  6. Əgər yazdığımız proqramda data-da olan elemetlərə indekslə müraciət çox istifadə olunacaqsa List götürmək lazımdır. Əgər unikal elementlər istifadə olunacaqsa Set, key/value cütlüyü istifadə olanacaqsa Map istifadə etməliyik.
  7. List interface-i elementlər arasında keçid etmək üçün ListIterator istifadə edir. Set Iteration, Map isə keyset, value və entry set-lərdən istifadə edir.

Müəllif: Məqsəd Novruzov 
ATL Akademiya / Java Backend məzunu

Qeydiyyat Formu

ATL Akademiyada qeydiyyatdan keçmək, tədris proqramı ilə yaxından tanış olmaq və ya əlavə suallarınızın cavablandırılması üçün formu doldurun, sizinlə zəng vasitə ilə əlaqə saxlayaq.