Java-da ListIterator bir interface hər iki istiqamətdə bir Siyahı kolleksiyasında gezinmek üçün istifadə etdiyimiz. Əvvəlki təlimdə öyrəndiyimiz Iterator interfeysini genişləndirir. Bu təlimatda Java ListIterator'u ətraflı nümunələrlə müzakirə edəcəyik.
Mündəricat
Java ListIterator
Java ListIterator interfeysi JDK 1.2-dən əldə edilə bilər. ListIterator istifadə edərək istənilən növ Siyahı Kolleksiyasını təkrarlamaq üçün istifadə edə bilərik siyahı, ArrayListvə ya LinkedList. Bu uzanır Iterator
. Həm irəli, həm də geri istiqamətdə hərəkət etmək üçün ListIterator-dan istifadə edə bilərik. Əməliyyatları oxumaq, əlavə etmək, yeniləmək və silmək üçün də istifadə edə bilərik. ListIterator interfeysindən istifadə etmək üçün java.util.ListIterator
paket.
Java ListIterator metodları
Aşağıda ListIterator-un dəstəklədiyi metodlar verilmişdir.
Üsul | təsvir | Parametr |
---|---|---|
etibarsız əlavə (Object e) | Ya növbəti () metodu ilə qaytarılmış elementdən əvvəl, ya da əvvəlki () üsulu ilə qaytarılmış elementdən sonra siyahıya bir element əlavə edir. | e - daxil ediləcək element |
boolean hasNext () | İrəli istiqamətdə keçmək üçün daha çox element varsa, doğru qayıdır | |
boolean hasPrevious () | Əks istiqamətdə keçmək üçün daha çox element varsa, doğru qayıdır | |
Növbəti obyekt () | İrəli istiqamətdə hərəkət edərkən siyahıda növbəti elementi qaytarır. | |
int nextIndex () | Növbəti elementin indeksini qaytarır | |
Əvvəlki obyekt () | Siyahını tərs istiqamətdə gəzərkən əvvəlki elementi qaytarır. | |
int previousIndex () | Əks istiqamətdə hərəkət edərkən əvvəlki elementin indeksini qaytarır | |
ləğv et () | Növbəti () üsulu və ya əvvəlki () üsulu ilə qaytarılmış elementi silir. | |
boşluq dəsti (obyekt e) | Növbəti () və ya əvvəlki () tərəfindən qaytarılmış elementi göstərilən elementlə əvəz edir.Bu metodu istifadə etmək üçün növbəti () və ya əvvəlki () metodlardan sonra nə add () nə də kaldır () çağırılmamalı idi. | e - dəyişdiriləcək element |
ListIterator-un işlənməsi
Aşağıda Java ListIterator-un işini təsvir edən addımlar verilmişdir.
- List Collections-dan hər hansı birini istifadə edərək ListIterator obyekti yaradın. Məsələn:
ListIterator<String> iterator_variable = list_variable.listiterator();
- İrəli istiqamətdə keçmək üçün istifadə edirik
hasNext()
daxilində metodwhile
siyahıda daha çox element olub olmadığını yoxlamaq üçün loop. - Yuxarıda göstərilən şərt doğrudursa, istifadə edərək elementə daxil ola bilərik
next()
metodu. - Geriyə doğru hərəkət etmək üçün
hasPrevious()
daxilində metodwhile
siyahıda elementlərin olub olmadığını yoxlamaq üçün loop. - Yuxarıdakı şərt doğrudursa, elementini istifadə edərək əldə edə bilərik
previous()
metodu. - Elementin indeksinə irəli və geri istiqamətdə daxil olmaq üçün istifadə edə bilərik
nextIndex()
vəpreviousIndex()
üsulları.
ListIterator nümunəsi
Ci nümunə aşağıda, müxtəlif Java ListIterator metodlarının istifadəsini nümayiş etdiririk. İrəli istiqamətdə getmək üçün istifadə edirik hasNext
şərt yalan qayıdana qədər metod və next
ArrayListdəki elementə daxil olmaq üçün metod. İndeks dəyərini almaq üçün nextIndex
metod. Aralıq 1-dən başlayır. Son element indeks dəyəri siyahının ölçüsü olacaq, bu halda 4-dür.
Əks istiqamətdə hərəkət etmək üçün istifadə edirik hasPrevious
şərt yalan qayıtana qədər. Elementi almaq üçün istifadə edirik previous
metodu və indeks dəyərini əldə etmək üçün istifadə edirik previousIndex
. Aralıq -1-dən başlayır, yəni ilk indeks dəyəri -1, son element dəyəri isə 2-dir.
import java.util.ArrayList; import java.util.ListIterator; public class ListIteratorDemo { public static void main(String[] args) { ArrayList<String> states = new ArrayList<String>(); states.add("Delhi"); states.add("Karnataka"); states.add("TamilNadu"); states.add("Hyderabad"); ListIterator l = states.listIterator(); System.out.println("Forward direction:"); while(l.hasNext()) System.out.println("Value: " + l.next() + " Index: " + l.nextIndex()); System.out.println("Reverse direction:"); while(l.hasPrevious()) System.out.println("Value: " + l.previous() + " Index: " + l.previousIndex()); } }
Forward direction: Value: Delhi Index: 1 Value: Karnataka Index: 2 Value: TamilNadu Index: 3 Value: Hyderabad Index: 4 Reverse direction: Value: Hyderabad Index: 2 Value: TamilNadu Index: 1 Value: Karnataka Index: 0 Value: Delhi Index: -1
Nümunə: Java-da ListIterator metodlarını əlavə edin və seçin
Aşağıda istifadə nümunəsidir add
və set
ListIterator metodları. İstifadə etdikdə add()
metoddan əvvəl yeni dəyəri əlavə edir next()
metod çağırışı. Buna görə ilk mövqe olaraq “Kerala” dəyərini əlavə edir. Biz çağırdığımızda set()
metod, sonuncunun dəyərini yeniləyir next()
metod deyilir. Bu vəziyyətdə “Hyderabad” dəyərini “Maharashtra” ilə əvəz edir.
Bu dəyərləri ya tərs istiqamətdə hərəkət etməklə, ya da ArrayList dəyişənini yazmaqla əldə edə bilərik.
import java.util.ArrayList; import java.util.ListIterator; public class ListIteratorDemo { public static void main(String[] args) { ArrayList<String> states = new ArrayList<String>(); states.add("Delhi"); states.add("Karnataka"); states.add("TamilNadu"); states.add("Hyderabad"); ListIterator<String> l = states.listIterator(); System.out.println("Forward direction:"); l.add("Kerala"); while(l.hasNext()) { System.out.println(l.next()); } l.set("Maharashtra"); System.out.println("Updated States List: " + states); System.out.println("Reverse direction:"); while(l.hasPrevious()) { System.out.println(l.previous()); } } }
Forward direction: Delhi Karnataka TamilNadu Hyderabad Updated States List: [Kerala, Delhi, Karnataka, TamilNadu, Maharashtra] Reverse direction: Maharashtra TamilNadu Karnataka Delhi Kerala
Nümunə: Java-da ListIterator metodunu silin
Aşağıda remove
ListIterator-dakı metod. Elementin dəyəri 2-dirsə, elementi çıxarırıq. Yenilənmiş siyahıda 2 dəyərinin silindiyini görə bilərik.
import java.util.ListIterator; import java.util.LinkedList; public class RemoveListIterator { public static void main(String[] args) { LinkedList<Integer> num = new LinkedList<Integer>(); for(int i=0;i<5;i++) num.add(i); System.out.println("Original numbers: " + num); ListIterator<Integer> li = num.listIterator(); while(li.hasNext()) { int val = li.next(); if(val == 2) li.remove(); } System.out.println("List after remove: " + num); } }
Original numbers: [0, 1, 2, 3, 4] List after remove: [0, 1, 3, 4]
Misal: ListIterator indeksi ilə
ListIterator metodundan istifadə edərkən indeks dəyərini də təyin edə bilərik. Bu, göstərilən indeksdən başlayaraq elementləri təkrarlaya biləcəyimiz deməkdir. Aşağıdakı nümunədə, indeks 2-dən təkrarlanırıq. Buna görə dəyərləri Göydən yazdırır.
import java.util.ListIterator; import java.util.ArrayList; public class ListIteratorIndex { public static void main(String[] args) { ArrayList<String> colors = new ArrayList<String>(); colors.add("Red"); colors.add("Green"); colors.add("Blue"); colors.add("Pink"); colors.add("Orange"); ListIterator<String> li = colors.listIterator(2); System.out.println("Display the values from index 2:"); while(li.hasNext()) System.out.println(li.next()); } }
Display the values from index 2: Blue Pink Orange
ListIterator-un Java-dakı üstünlükləri
- İki yönlü naviqasiyaya imkan verir
- Oxumaq, əlavə etmək, yeniləmək və silmək kimi bütün əməliyyatları dəstəkləyir.
- Metod adları kiçikdir və başa düşülməsi asandır.
Java-da ListIterator-un məhdudiyyətləri
- Yalnız List, ArrayList, LinkedList kimi Siyahı Kolleksiyaları üçün istifadə edilə bilər.
- Universal iterator deyil.
- Java ListIterator paralel təkrarlamanı dəstəkləmir.
ListIterator-da istisnalar
Aşağıda istisnalar Java ListIterator interfeysindən istifadə zamanı baş verə biləcək:
- NoSuchElementException - istifadə edərkən təkrarlamaq üçün heç bir element olmadıqda
next()
metodu. - DəstəklənməyənOperationException - Təkrarlayıcı dəstəkləmirsə
set()
oradd()
metodu. - ClassCastException - Bu
set()
oradd()
metod, elementin sinfi siyahıya əlavə edilməsinə mane olarsa. - Qeyri-qanuni sənəd - Bu
set()
oradd()
metodu, elementin bəzi cəhətləri siyahıya əlavə etməsini maneə törədirsə.
Iterator və ListIterator arasındakı fərq
İterator | ListIterator |
---|---|
Universal iteratordur | Universal iterator deyil |
Hər növ Kolleksiya üçün istifadə edilə bilər | Yalnız List tətbiq sinifləri üçün istifadə edilə bilər |
Yalnız oxuma və silmə əməliyyatını dəstəkləyir | Əməliyyatlar əlavə etmək, yeniləmək, oxumaq və silməyi dəstəkləyir. |
Yalnız irəli naviqasiya üçün istifadə edilə bilər | İrəli və əks istiqamətdə naviqasiya üçün istifadə edilə bilər |
İki yönlü təkrarlayıcı deyil | İki yönlü təkrarlayıcıdır |
İterator () metodundan istifadə edirik | Listiterator () metodundan istifadə edirik. |
Təkrarlanma üçün indeks təyin edə bilmərik | Təkrarlamaq üçün indeks təyin edə bilərik |