Sadalama və İterator
Vektorlar, Hash cədvəlləri və Java Kolleksiyaları Çərçivəsini tətbiq edən siniflər (yəni HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap və LinkedHashSet) kimi Java-da kolleksiya kimi fəaliyyət göstərən bir çox məlumat strukturları var. Java-da obyektlərin ayrı-ayrı elementləri arasında təkrarlamağın bir çox yolu var. Java bu işi asanlaşdırmaq üçün iki interfeys təqdim edir. Sadalama və İterator, java.util paketində tapılan və elementlər dəsti ilə ardıcıllıqlar və ya obyektlər vasitəsilə sadalamaq üçün funksionallıq təmin edən iki interfeysdir. Sayıcı JDK 1-də təqdim edildi.0 və JDK 1.2-də təqdim edilmiş İterator, Sadalayıcının funksionallığını faktiki olaraq təkrarlayır (Kolleksiyalar Çərçivəsi daxilində).
Sadalama nədir?
Saylama Java-da JDK 1.0-da təqdim edilmiş ictimai interfeysdir və elementlərin ardıcıllığı vasitəsilə sadalamaq imkanı verir. O, java.util paketinin altında tapılır. Sadalama interfeysi obyekt tərəfindən həyata keçirildikdə, həmin obyekt elementlər ardıcıllığını yarada bilər. Sadalama interfeysi iki üsula malikdir. hasMoreElements() metodu bu siyahının daha çox elementdən ibarət olub-olmadığını yoxlayacaq və nextElement() ardıcıllıqla növbəti elementi qaytarır (əgər ən azı daha bir nəfər varsa). Başqa sözlə, növbətiElement()-ə ardıcıl zəng etməklə proqramçı seriyanın ayrı-ayrı elementlərinə daxil ola bilər. Məsələn, Enumerator istifadə edərək Vektor v1-də bütün elementləri çap etmək üçün aşağıdakı kod parçasından istifadə etmək olar.
Sayada e=v1.elements();
While(e.hasMoreLements()){
System.out.println(e.nextElement());
}
Sayəci həmçinin SequenceInputStream obyektlərinə daxiletmə axınını müəyyən etmək üçün istifadə edilə bilər.
İterator nədir?
İterator, Kolleksiyalar çərçivəsini həyata keçirən kolleksiya obyektlərinin elementləri (məsələn, ArrayList, LinkedList və s.) vasitəsilə təkrarlamağa imkan verən Java.util paketində ictimai interfeysdir. Bu, JDK 1.2-də təqdim edildi və Java Kolleksiyaları Çərçivəsi daxilində Sadalayıcını əvəz etdi. İteratorun üç üsulu var. hasNext() metodu kolleksiyada qalan elementlərin olub olmadığını yoxlayır və next() metodu seriyanın növbəti elementini qaytarır. Remove() metodu cari elementi əsas kolleksiyadan silmək üçün istifadə edilə bilər. Məsələn, İteratordan istifadə edərək Vektor v1-də bütün elementləri çap etmək üçün aşağıdakı kod parçasından istifadə etmək olar.
İterator i=v1.elements();
While(i.hasNext()){
System.out.println(e.next());
}
Sadalama və İterator arasındakı fərq nədir?
Sadalama və İterator java.util paketində tapılan və seriyanın elementləri vasitəsilə təkrarlama/sadalamağa imkan verən iki interfeys olsa da, onların fərqli cəhətləri var. Əslində, Sadalanmadan sonra təqdim edilən İterator Java Kolleksiyaları çərçivəsində Sadalamayı əvəz edir. Sadalamadan fərqli olaraq, İterator uğursuzluqdan qorunur. Bu o deməkdir ki, İterator istifadə edildikdə paralel dəyişikliklərə (əsas kolleksiyaya) icazə verilmir. Bu, həmişə eyni vaxtda dəyişikliklər riskinin olduğu çox yivli mühitlərdə çox faydalıdır. Paralel modifikasiya halında, İterator obyekti ConcurrentModificationException atacaq. İterator, Enumerator ilə müqayisədə daha qısa metod adlarına malikdir. Bundan əlavə, iterator iterasiya zamanı elementləri silmək üçün əlavə funksiyaya malikdir (bu, Enumerator istifadə edərək mümkün deyil). Beləliklə, kolleksiyadan elementləri silmək zərurəti yaranarsa, İterator nəzərdən keçirilə bilən yeganə seçimdir.