java iterator learn use iterators java with examples
У овом упутству ћемо научити о итераторима на Јави. Имаћемо детаљну расправу о интерфејсима Итератор и ЛистИтератор у Јави:
Истражили смо све о Јава Цоллецтион Фрамеворк-у и разним пратећим интерфејсима и класама у једном од наших претходних водича.
Када имате колекцију, тада желите да приступите њеним елементима, додате / уклоните или обрадите елементе. Да бисте све ове процесе урадили кроз Јава програм, требали бисте бити у могућности да прелазите кроз колекцију коју користите. Овде се итератор појављује у слици.
Шта ћете научити:
- Шта је Јава Итератор?
- Закључак
Шта је Јава Итератор?
У Јави, Итератор је конструкција која се користи за прелазак или прелазак кроз колекцију.
Да бисте користили Итератор, потребно је да објект итератора добијете помоћу „ итератор () ” метода интерфејса за прикупљање. Јава Итератор је интерфејс оквира за прикупљање и део је пакета „јава.утил“. Користећи Јава Итератор можете прелиставати колекцију предмета.
Сучеље Јава Итератор замењује пописивач који је раније коришћен за пролазак кроз неке једноставне колекције попут вектора.
Главне разлике између Јава Итератора и Енумератора су:
- Значајно побољшање имена метода.
- Елементе методе можете уклонити из колекције која се прелази помоћу итератора.
У овом упутству ћемо разговарати о детаљима интерфејса Итератор и интерфејса ЛистИтератор који је двосмерни интерфејс.
Типови итератора
- Пописивач
- Итератор
- ЛистИтератор
Пописивач се сада ретко користи. Стога ћемо се у нашој серији туторијала фокусирати на интерфејсе Итератор и ЛистИтератор.
Итератор интерфејс у Јави
Интерфејс Итератор у Јави део је оквира Цоллецтионс у пакету ‘јава.утил’ и курсор је који се користи за корачање кроз колекцију објеката.
Интерфејс Итератор има следеће главне карактеристике:
- Интерфејс Итератор доступан је од оквира колекције Јава 1.2 надаље.
- Прелази колекцију предмета један по један.
- Популарно познат као „Универзални курсор Јава“, јер ради са свим колекцијама.
- Овај интерфејс подржава операције читања и уклањања, тј. Можете уклонити елемент током итерације помоћу итератора.
Општи приказ интерфејса Итератор дат је у наставку:
Затим, погледајмо горе наведене методе Итератор.
Итераторске методе
Интерфејс Итератор подржава следеће методе:
# 1) Даље ()
Прототип: Е следећи ()
Параметри: без параметара
Тип повратка: Е -> елемент
Опис: Враћа следећи елемент у колекцији.
Ако итерација (колекција) нема више елемената, онда баца НоСуцхЕлементЕкцептион .
# 2) хасНект ()
Прототип: боолеан хасНект ()
Параметри: НУЛА
Тип повратка: тачно => у колекцији постоје елементи.
Нетачно => нема више елемената
Опис: Функција хасНект () проверава има ли више елемената у колекцији којој се приступа помоћу итератора. Ако више нема елемената, онда нећете позвати методу нект (). Другим речима, ова функција се може користити за одлучивање да ли ће се позвати следећа () метода.
# 3) уклони ()
Прототип: воид ремове ()
Параметри: НУЛА
Тип повратка: НУЛА
Опис: Уклања последњи елемент који је итератор вратио у итерацију преко основне колекције. Метода ремове () може се позвати само једном у следећем () позиву.
Ако итератор не подржава операцију уклањања, баца УнСуппортедОператионЕкцептион . Баца ИллегалСтатеЕкцептион ако следећа метода још није позвана.
# 4) форЕацхРемаининг ()
Прототип: воид форЕацхРемаининг (потрошач super ИС > акција)
Параметри: акција => радња коју треба извршити
Тип повратка: празнина
Опис: Изводи наведену радњу на сваком од преосталих елемената колекције све док се сви елементи не исцрпе или док акција не изузме изузетак. Изузеци избачени акцијом преносе се на позиваоца.
Ако је радња ништавна, онда се подиже нуллПоинтерЕкцептион . Ова функција је нови додатак интерфејсу Итератор у Јави 8.
Пример Јава Итератора
Применимо Јава програм да демонстрирамо употребу интерфејса Итератор. Следећи програм креира АрраиЛист цвећа. Затим добија итератор користећи итератор () методу АрраиЛист. Након тога, листа се прелази да би се приказао сваки елемент.
import java.util.*; public class Main { public static void main(String() args) { List flowers = new ArrayList(); flowers.add('Rose'); flowers.add('Jasmine'); flowers.add('sunflower'); // Get Iterator IteratorflowersIterator = flowers.iterator(); System.out.println('Contents of ArrayList:'); // Traverse elements using iterator while(flowersIterator.hasNext()){ System.out.print(flowersIterator.next() + ' '); } } }
Излаз:
Ограничења интерфејса итератора
- Операција замјене елемента или додавања новог елемента не може се извршити с овим Итератором.
- Итерација се одвија само у једном смеру, тј. Правцу напред.
- Подржава само секвенцијалну итерацију.
- Када треба обнављати велике количине података, то утиче на перформансе Итератора.
Итератор ВсИтерабле
Иако интерфејси Итерабле и Итератор звуче слично, они се потпуно разликују. Класа која имплементира интерфејс Итерабле стиче могућност итерације над објектима класе који користе интерфејс итератора.
Доље су дате неке од главних разлика између ова два интерфејса којих морате бити свесни:
Итерабле Интерфаце | Итератор Интерфаце |
---|---|
Представља колекцију која се може прећи помоћу петље фореацх. | Омогућава понављање неке друге колекције. |
Класа која имплементира итерабилни интерфејс мора да замени методу итератор (). | хасНект () и нект () методе интерфејса Итератор треба да надјача класа која га примењује. |
Не чува тренутно стање. | Похрањује тренутно стање итерације. |
Примерак интерфејса итератора треба произвести сваки пут када се позове метода итератор (). | Не постоји такав уговор за интерфејс итератора. |
Креће се само у правцу напред. | Креће се у правцу унапред, а подинтерфејси попут листИтератор подржавају двосмерно прелажење. |
Не пружа ниједан метод за модификовање елемената током итерације. | Пружа методу уклањања која може уклонити елемент током понављања. |
ЛистИтератор сучеље у Јави
Интерфејс ЛистИтератор је подинтерфејс интерфејса итератора. Ради на колекцијама врста листе као што су Линкедлистс, листе низова итд. Тако овај интерфејс превазилази недостатке интерфејса Итератор.
Главне карактеристике интерфејса ЛистИтератор укључују:
- ЛистИтератор интерфејс проширује интерфејс Итератор.
- ЛистИтератор интерфејс подржава ЦРУД операције, тј. Креирање, читање, ажурирање и брисање.
- Подржава итерацију у правцу напријед и назад.
- Како је овај интерфејс двосмеран, курсор се увек поставља између претходног и следећег елемента.
- Овај интерфејс углавном ради за имплементације листа као што су АрраиЛист, ЛинкедЛист итд.
- Доступно од Јаве 1.2
Интерфејс ЛистИтератор представљен је како је приказано доле:
Као што је већ поменуто, интерфејс ЛистИтератор проширује интерфејс Итератор. Стога, осим што подржава све методе интерфејса итератора, као што је приказано изнад, интерфејс ЛистИтератор такође има сопствене методе које му помажу у извођењу ЦРУД операција, као и двосмерну итерацију.
Размотримо детаљно методе ЛистИтератор.
Методе ЛистИтератор
Имајте на уму да методе интерфејса Итератор, нект (), хасНект () и ремове () раде тачно, на исти начин као и интерфејс ЛистИтератор. Стога ћемо ове методе прескочити у овом одељку. Поред горе поменутих метода, ЛистИтератор има и следеће методе-
Претходна()
Прототип: Е претходна ()
Параметри: НУЛА
Тип повратка:
Е- претходни елемент на листи.
- 1 - ако је итератор на почетку листе.
Опис: Ова функција враћа претходни елемент са листе. Једном када се врати претходни елемент, курсор се помера уназад до следећег елемента.
хасПревиоус ()
Прототип: боолеан хасПревиоус ()
Параметри: НУЛА
Тип повратка: труе => итератор има више елемената када се листа креће уназад.
Опис: Ова функција проверава да ли ЛистИтератор има више елемената у назадном смеру.
превиоусИндек
Прототип: инт превиоусИндек ()
Параметри: НУЛА
Тип повратка:
инт - индекс претходног елемента
- 1 - ако је показивач на почетку листе.
Опис: Враћа индекс претходног елемента који је враћен претходним () позивом.
нектИндек
Прототип: инт нектИндек ()
Параметри: НУЛА
Тип повратка:
инт - следећи индекс
- 1 - ако је итератор на крају листе.
Опис: Враћа следећи индекс елемента на листи. Овај елемент се враћа позивом на нект () методу.
комплет()
Прототип: празнина постављена (Е и)
Параметри: е - елемент који треба заменити
Тип повратка: НУЛА
Опис: Користи се за замену последњег елемента датим елементом е.
додати()
Прототип: воид адд (Е е)
Параметри: е - елемент који се додаје
Тип повратка: НУЛА
Опис: Додаје нове елементе на листу на месту пре положаја следећег () елемента.
Пример итератора листе
Сада знамо шта је ЛистИтератор и које су разне методе које он подржава. Хајде да применимо Јава програм за демонстрацију ЛистИтератор.
У овом програму смо користили АрраиЛист. Затим користимо методе ЛистИтератор за прелазак листе у правцу напријед и уназад и приказујемо излаз.
import java.util.*; class Main { public static void main(String args()) { Listnum_list = new ArrayList(); // Add Elements to ArrayList num_list.add(1); num_list.add(3); num_list.add(5); num_list.add(7); num_list.add(9); // Creatinge a ListIterator ListIteratorlist_it = num_list.listIterator(); System.out.println('Output using forward iteration:'); while (list_it.hasNext()) System.out.print(list_it.next()+' ') ; System.out.print('
Output using backward iteration:
') ; while (list_it.hasPrevious()) System.out.print(list_it.previous()+' '); } }
Излаз:
До сада смо разговарали о интерфејсима, итератору и Листитератору, затим ћемо видети разне примере употребе ових интерфејса за прелазак различитих колекција. Али прво, погледајмо прелажење једноставних низова, а затим пређимо на друге колекције.
Арраи Итератор
У Јави постоје два начина за прелазак преко елемената низа. Опишимо начине помоћу примера кода.
# 1) за петљу
Ово је најједноставнији начин понављања низа. Користимо једноставну фор петљу која ће повећавати индекс са сваком итерацијом и приказивати његов садржај.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for loop:'); for (int i = 0; i Излаз:

Горњи програм приказује садржај низа помоћу петље фор.
# 2) форЕацх петља
Ово је други начин за итерацију преко низова. Овде користимо специјализовану петљу фор или „форЕацх“. Овде пролазимо кроз низ за сваки елемент, а затим приказујемо садржај.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for each loop:'); for (int i :myArray) { // accessing each element of array num = i; System.out.print(num + ' '); } } }
Излаз:

ФорЕацх је оптимизованији у поређењу са фор лооп-ом. Краће је за куцање, а брже је.
АрраиЛист Итератор
У случају да желите да пређете кроз колекцију АрраиЛист, то можете учинити помоћу интерфејса Итератор. Како је итератор интерфејс, не можете га директно покренути. Уместо тога, можете користити метод итератора () АрраиЛист да бисте добили итератор и затим прешли листу.
Итератор итератора ();
Пример за демонстрацију АрраиЛист Итератор.
import java.util.*; public class Main { public static void main(String() args) { ArrayListmyList = new ArrayList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); Iteratorlist_it = myList.iterator(); System.out.println('Elements in the arrayList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Излаз:

ЛинкедЛист Итератор
Сада да видимо функционалност итератора у случају ЛинкедЛист колекције.
Колекција ЛинкедЛист подржава методу листИтератор () која враћа листИтератор да се креће кроз повезану листу.
Општи формат за ову функцију је
ЛистИтератор лист_итер = ЛинкедЛист.листИтератор (инт индекс);
Овде је индекс целобројна вредност која одређује положај у колекцији повезаних листа одакле би кретање требало да започне.
Дозволите нам да разумемо итератор листе на повезаној листи са узорком програма. Модификовали смо исти програм итератора низа и променили га тако да садржи листитератор са ЛинкедЛист-ом.
import java.util.*; public class Main { public static void main(String() args) { LinkedListmyList = new LinkedList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); ListIteratorlist_it = myList.listIterator(0); System.out.println('Elements in the LinkedList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Излаз:
бесплатна заштита заштитног зида за Виндовс 7

Јава Мап / Хасхмап Итератор
Мапа или њене варијације попут хеш-мапе, мапе дрвета итд. Нису колекције. Стога на њему не можете директно користити метод итератора. Уместо тога, требало би да пређете преко вредности уноса кључа да бисте прочитали парове кључ / вредност.
Иако можете користити разне методе попут форЕацх, фор лооп, итд. За итерацију вредности мапе, употреба итератора за итерацију кроз кључне вредности је најбољи и ефикаснији метод. Поред тога, такође можете уклонити уносе са мапе током итерације методом уклањања.
Пример употребе Итератора са ХасхМап-ом.
import java.util.*; class Main { public static void main(String() arg) { MapmyMap = new HashMap(); // enter name/url pair myMap.put(1, 'India'); myMap.put(2, 'Nepal'); myMap.put(3, 'Maldives'); myMap.put(4, 'SriLanka'); System.out.println(' SAARC Member Countries '); System.out.println(' KEY' + ' ' + ' COUNTRY' ); // using iterators Iteratormap_itr = myMap.entrySet().iterator(); while(map_itr.hasNext()) { Map.Entrymap_entry = map_itr.next(); System.out.println(' ' + map_entry.getKey() + ' ' + map_entry.getValue()); } } }
Излаз:

У горњем програму смо дефинисали мапу са целобројним кључевима и вредностима типа стринга. Затим дефинишемо итератор преко мапе. Унесите и прикажите парове кључ / вредност.
Јава Сет Итератор
Метода итератор () Јава.утил.сет користи се за добивање итератора који враћа елементе у скупу случајним редоследом.
Iterator set_iterator = Set.iterator();
„Сет_итератор“ превлачи различите елементе скупа и враћа њихове вредности.
На сличан начин, хасх сет такође садржи функцију итератора која враћа итератор попут итератора скупа.
Iterator hashset_iterator = Hash_Set.iterator();
Доље је дат пример програмирања за демонстрацију постављеног итератора.
import java.util.*; public class Main { public static void main(String args()) { HashSetsports_set = new HashSet(); sports_set.add('Hocky'); sports_set.add('Kabaddi'); sports_set.add('Football'); sports_set.add('Badminton'); sports_set.add('Cricket'); System.out.println('Sports HashSet: ' + sports_set); // Creating an iterator Iterator hashset_iter = sports_set.iterator(); // Displaying the values after iterating through the set System.out.println('
SportsSet iterator values:'); while (hashset_iter.hasNext()) { System.out.println(hashset_iter.next()); } } }
Излаз:

Ова имплементација користи ХасхСет итератор и приказује појединачне вредности превлачењем преко елемената ХасхСет.
Итератор вс ЛистИтератор
Хајде да табуларизујемо главне разлике између интерфејса Итератор и ЛистИтератор.
Итератор ЛистИтератор Може да пређе све колекције, укључујући сет, мапу итд. Може се користити за пролазак само кроз колекцију врста листе попут АрраиЛист, ЛинкедЛист. Копира колекцију само у смеру према напријед. Може да изврши итерацију преко колекције у правцу као и уназад. Није могуће добити индексе. Може добити индексе. Никако да додате нове елементе у колекцију. У колекцију можете да додате нове елементе. Итератор не може да модификује елементе током итерације. ЛистИтератор може модификовати елементе у колекцији методом сет ().
Често постављана питања
П # 1) Шта је итерација у Јави?
Одговор: Итерација је поступак којим се блок кода више пута извршава све док се не испуни или не постоји дати услов. Помоћу итерације можете прелазити кроз низ елемената или обрађивати податке.
П # 2) Колико типова итератора постоји на Јави?
Одговор: Итератори се користе за прелазак кроз колекције на Јави.
У Јави постоје три врсте итератора:
- Пописивачи
- Итераторе
- ЛистИтераторс
П # 3) Како да користим Итератор на Јави?
Одговор: Да бисте користили итератор за прелазак кроз колекцију, прво морате да набавите итератор методом итератор () наведене колекције.
Тада можете користити методе хасНект () и нект () итератора да бисте добили елемент.
П # 4) Зашто се Итератор користи уместо за петљу?
Одговор: И итератор као и фор петља користе се за опетовано извршавање одређеног блока кода. Али главна разлика је у томе што у фор петљи не можете мењати или мењати садржај колекције. Чак и ако покушате да га модификујете, бациће цонцуррентМодифицатионЕкцептион. Помоћу итератора можете уклонити елемент из колекције.
П # 5) Зашто нам је потребан Итератор у Јави?
Одговор: Итератор вам помаже да преузмете елементе у колекцији или контејнеру, а да програмер не мора знати унутрашњу структуру или рад колекције. Они су елегантнији, троше мање меморије, а такође је и програмер поштеђен писања дугог кода.
Друго, елементи се могу чувати у колекцији на било који начин, али помоћу итератора програмер може да их дохвати баш попут листе или било које друге секвенце.
Закључак
У овом упутству смо разговарали о итераторима на Јави који се користе са колекцијама. Ово знање итератора помоћи ће читаоцима да схвате колекције које ћемо научити у нашим следећим водичима.
Препоручено читање
- Јава интерфејс и лекција са апстрактним часовима са примерима
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- Примена Јава-а: Стварање и извршавање Јава ЈАР датотеке
- Јава 'тхис' кључна реч: Водич са примерима кода
- Јава виртуелна машина: како ЈВМ помаже у покретању Јава апликације
- Приступити модификаторима у Јави - Водич са примерима
- Водич за Јава рефлексију са примерима
- Ц ++ Вс Јава: 30 најбољих разлика између Ц ++ и Јаве са примерима