Collections API ( Stack and Queue )



List terkibinde add , size , remove, set ve diger metodlari olan interfacedir.

ArrayList, LinkedList, Vector  - List interface den implements edib.

ArrayList ozu arxada Array istifade edir.
1.add zamani eger capasity dolubsa, yeni array yaradir ve evvelki arrayi buna set edir. Performans cehetden problem olsa da, initialCapasity vermekle bu problemi onlemek olur.
2. remove zamani proses eyni gedir, yeni array yaradilir. Lakin burada problemin qarshisini almaq mumkun deyil. Her remove zamani yeni array yaradilir.
3. get prosesi burada optimal gedir.

LinkedList arxada Array istifade etmir.
Burada Obyektler bir birinin ichine set olunur. (Node)
1. Ilk add olunan zamani obyekt sonuncu index kimi yadda saxlanilir. Daha sonra her add zamani yadda saxlanan sonuncu obyekte yeni gelen obyekt set olunur.
2. Remove zamani ArrayList den ferqli olaraq burada optimal gedir. Remove olunacaq obyekt yerine ozunden sonraki obyekt set olunur.
3. get prosesi burada optimal veziyyetde ishlemir.

Vector ishleme prinsipi ArrayList le eynidir.
Ferqli ceheti bundan ibaretdir ki, Vectorun ekser metodlari synchronized olunub. Bu da ThreadSafety ustunluyu verir.

Lakin chox vaxt Vector istifade olunmur. Collections.synchronizedList() istifade olunur. Bu metoda oz Listimizi gonderirik ve geriye synchronized olunmush list qaytarir. Artiq List add eden zaman direkt olaraq Liste add eede bilmirik. Add elediyimiz obyekt evvelce synchronized olunmush liste gedir, daha sonra bizim liste elave olunur.

Skeletal Desing
Abstract class bezi metodlarini ozu yazir digerlerini ise onu extend edecek classin ohdesine buraxir. Bu skeletal design adlanir.

Yuxardaki shekilde olmasa da Collection ozu Iterable i extends edir.
Oz ClassList forEach da istifade etmek uchun Iterable implements etmelidir
ve daxilinde olan Iterator interface den yeni anonym obyekt yaratmalidir. (hasNext ve next methodlarini override etmek uchun).


Sual ola biler ki, Collection interface i implement etmeyen ClassList i forEach da istifade etmek olar ya yox ? Cavabi olar , Lakin mutleq Iterable interface i implement etmelidir, Collection etmese de olar.

Stack, (LIFO - last in first out)
Queue, (FIFO - first in first out)
Producer Consumer Design pattern de istifade etmek olar.
Eger bu patternde List istifade etsek, bezen isteiyimiz neticeni almaya bilerik (meselen indexler bir birine qarisha biler ve s.) Buna gore Queue istifade etdiyimiz zaman, elementleri yalniz FIFO prinsipine gore elde etmek olur.

Popular posts from this blog

Validation for AZ phone numbers with RegEx in Java

Java necə işləyir, kod nədir ?

@Transactional annotation haqqinda. Cascade istifade olunmasi