Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.
Java-da Iterator, fərdi elementləri əldə etmək üçün bir kolleksiyada gezinmek üçün istifadə olunan bir interfeysdir. Kolleksiya bir ola bilər ArrayList, LinkedList, HashSetvə s. Java 1.2-də mövcud olan universal bir iteratordur. Java 1.2-dən əvvəl istifadə edirik Numaralandırma iterator kimi. Sayımın bir neçə məhdudiyyətinə görə Java İterator interface sonra ListIterator və SplitIterator.
Əvvəlcə, Enumeration haqqında anlayaq və sonra İteratorun niyə təqdim olunduğunu öyrənək.
Mündəricat
Numaralandırma
Enumeration Java 1.0-dan bəri mövcud olan ilk iterator idi. Elementləri yalnız Vector, Hashtable, və s. Kimi Legacy kolleksiyalarından almaq üçün istifadə edə bilərik. Yalnız oxuma əməliyyatını dəstəkləyir və sadalamadan istifadə edərək yeniləmə və ya silmə əməliyyatını həyata keçirə bilmərik.
Siyahıya alma üsulları
Enumeration yalnız aşağıdakı 2 metodu dəstəkləyir:
ictimai boolean hasMoreElements () - Kolleksiyanın daha çox elementə sahib olub olmadığını yoxlayır
ictimai obyekt nextElement () - Kolleksiyadakı növbəti elementi qaytarır. Atır NoSuchElementException kolleksiyanın keçmək üçün heç bir elementi olmadıqda.
Nümunə
Aşağıda Vektor kolleksiyasından keçmək üçün sadalanmanın sadə bir nümunəsi verilmişdir. Biz istifadə edirik elements()
Vektordakı bütün elementlərə giriş əldə etmək üsulu. Sonra kolleksiyanın daha çox elementə sahib olub olmadığını yoxlamaq üçün Enumeration obyektini istifadə edin hasMoreElements
metod. Dəyərləri almaq üçün istifadə edin nextElement
metodu.
import java.util.*; public class EnumerationDemo { public static void main(String[] args) { Vector vt = new Vector(); vt.add("Dev"); vt.add("Hari"); vt.add("Rishi"); Enumeration e = vt.elements(); while(e.hasMoreElements()) System.out.println(e.nextElement()); } }
Dev Hari Rishi
Enumerations məhdudiyyətlərini aşmaq üçün İterator interfeys Java 1.2-dən etibarən mövcud idi.
Java-da təkrarlayıcı
Elementləri almaq və hər hansı birindən təkrarlamaq üçün Java iteratoru istifadə edə bilərik növləri Kolleksiya. Buna görə Universal iterator kimi adını aldı. Həm oxumaq həm də silmək əməliyyatlarını dəstəkləyir. Tək yönlüdür və keçidi yalnız irəli istiqamətdə dəstəkləyir. Texniki baxımdan təkrarlama, kolleksiyadakı hər bir element arasında gezinme deməkdir. Buna görə də adını bir İterator.
Java İterator metodları
Java iterator aşağıda müzakirə edildiyi kimi 4 dəstəkləmə metoduna malikdir:
Üsul | təsvir |
---|---|
boolean hasNext () | Kolleksiyanın növbəti elementə sahib olub olmadığını yoxlayır. Kolleksiyada daha çox element varsa, doğru qayıdır |
String next (); | Növbəti elementi qaytarır. Heç bir element olmadığı təqdirdə NoSuchElementException atır |
ləğv et (); | Növbəti elementi silir. Next () metodu ilə zəng başına yalnız bir dəfə istifadə edilə bilər. |
void forEachRemaining (İstehlakçı hərəkəti) | Bütün elementlər işlənənə və ya əməliyyat istisna yaratana qədər hər bir element üçün göstərilən əməliyyatı yerinə yetirir |
Iterator-un Java-da işləməsi
Aşağıda bir iteratorun işini göstərən addımlar verilmişdir.
- Collection obyektindən istifadə edərək təkrarlayıcı metoduna daxil olun.
Iterator<Type> iterator_variable = collectionObject.iterator();
burada Iterator interfeys, Type məlumat növüdür (String, Integer), iterator_variable dəyişən addır, collectionObject ArrayList, LinkedList kimi hər hansı bir kolleksiyanın obyektidir. - Çərçivəsində
while
loop, kolleksiyanın istifadə edərək növbəti elementə sahib olub olmadığını yoxlayırıqhasNext
metod. Başlanğıcda, kursor əvvəlcə ilk elementdən əvvəlki vəziyyəti göstərəcəkdir. - Yuxarıdakı şərt doğrudursa, elementini istifadə edərək əldə edə bilərik
next
metod. Növbəti dəyəri gətirəcək və sonra kursor ilk elementə keçir. - Bu müddətə qədər davam edir
hasNext
metod yanlış bir dəyər qaytarır.
Java Iterator-da istisnalar
Aşağıda istisnalar Java iterator tərəfindən atıldı:
- NoSuchElementException - istifadə edərək daxil olmaq üçün bir element olmadığı zaman bu istisnanı atır
next
metodu. - DəstəklənməyənOperationException - Təkrarlayıcı dəstəkləmədikdə
remove
üsul - QanunsuzStateException - Zəng etdiyimiz zaman
remove
çağırmadan əvvəl metodnext
metodu. - ParalelModifikasiyaİstisna - Təkrarlama zamanı kolleksiyaya yeni bir dəyər əlavə etdikdə.
Iterator istifadə məhdudiyyətləri
- Yalnız irəli təkrarlamanı dəstəkləyir.
- Yeniləmək və ya heç bir element əlavə etmək olmur.
Java iterator nümunəsi
Aşağıdakı nümunədə, ArrayList-dən keçmək üçün Java iteratordan istifadə edirik. Budur yaş ArrayList obyektidir.
import java.util.Iterator; import java.util.ArrayList; public class IteratorDemo { public static void main(String[] args) { ArrayList<Integer> age = new ArrayList<Integer>(); age.add(10); age.add(20); age.add(30); age.add(40); age.add(50); Iterator<Integer> i = age.iterator(); while(i.hasNext()) System.out.print(i.next() + " "); } }
10 20 30 40 50
Aşağıda, elementləri tərs qaydada göstərmək üçün LinkedList-də təkrarlayıcıdan istifadənin başqa bir nümunəsi verilmişdir. Bu metod descendingiterator
yalnız LinkedList kolleksiyasında mövcuddur. İstifadə iterator
üsulu onları faktiki qaydada çap edə bilərik.
import java.util.Iterator; import java.util.LinkedList; public class IteratorDemo { public static void main(String[] args) { LinkedList<String> values = new LinkedList<String>(); values.add("Kavitha"); values.add("Sunitha"); values.add("Pavithra"); values.add("Lalitha"); Iterator<String> it = values.descendingIterator(); System.out.println("Names: "); while(it.hasNext()) System.out.print(it.next() + " "); Iterator<String> i = values.iterator(); System.out.println("\nNames in actual order: "); while(i.hasNext()) System.out.print(i.next() + " "); } }
Names: Lalitha Pavithra Sunitha Kavitha Names in actual order: Kavitha Sunitha Pavithra Lalitha
Bu, bir Dəstdəki elementlərdən keçmək üçün bir iterator istifadə etmək üçün başqa bir nümunədir.
import java.util.Iterator; import java.util.Set; import java.util.HashSet; public class IteratorSetExample { public static void main(String[] args) { Set<String> setnames = new HashSet<String>(); setnames.add("Roshan"); setnames.add("Kiran"); setnames.add("Tejas"); setnames.add("Karthik"); Iterator<String> iterator = setnames.iterator(); while(iterator.hasNext()) System.out.println(iterator.next()); } }
Roshan Kiran Tejas Karthik
Aşağıda iteratoru istifadə edərək elementi silmək üçün bir nümunə var.
import java.util.*; public class RemoveIterator { public static void main(String[] args) { ArrayList<Integer> num = new ArrayList<Integer>(); for(int i=1;i<=5;i++) num.add(i); System.out.println("Original numbers:"); System.out.println(num); Iterator<Integer> it = num.iterator(); while(it.hasNext()) { int val = (Integer)it.next(); if(val == 3) it.remove(); } System.out.println(); System.out.println("Numbers after removal:"); System.out.println(num); } }
Original numbers: [1, 2, 3, 4, 5] Numbers after removal: [1, 2, 4, 5]
Iterator istifadə edərək ConcurrentModificationException
İteratordan istifadə edərkən kolleksiyanın dəyərlərini əlavə etməyə və ya yeniləməyə çalışdığımızda ConcurrentModificationException atır. Aşağıda istisnanı göstərmək üçün bir nümunə var. Təkrarlama zamanı LinkedList kolleksiyasına yeni bir simli əlavə etməyə çalışdığımızda, istisna yaradır.
import java.util.Iterator; import java.util.LinkedList; public class IteratorExample { public static void main(String[] args) { LinkedList<String> values = new LinkedList<String>(); values.add("Kavitha"); values.add("Sunitha"); values.add("Pavithra"); values.add("Lalitha"); Iterator<String> i = values.iterator(); while(i.hasNext()) { values.add("Devika"); System.out.print(i.next() + " "); } } }
Exception in thread "main" java.util.ConcurrentModificationException at java.base/java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:970) at java.base/java.util.LinkedList$ListItr.next(LinkedList.java:892) at IteratorExample.main(IteratorExample.java:35)
Enumeration və Iterator arasındakı fərq
Numaralandırma | İterator |
---|---|
JDK 1.0-dan əldə etmək olar | JDK 1.2-dan əldə etmək olar |
Universal iterator deyil | Universal iteratordur |
Yalnız Vector, hashtable kimi miras kolleksiyalarını təkrarlamaq üçün istifadə edilə bilər | Hər hansı bir Koleksiyonu təkrarlamaq üçün istifadə edilə bilər |
Yalnız oxuma əməliyyatını dəstəkləyir | Həm oxumaq, həm də silmək əməliyyatını dəstəkləyir |
Uzun metod adları var Məsələn: hasMoreElements () | Qısa metod adları var Məsələn: hasNext () |
