"Halo, Amigo!"

"Halo, Ellie!"

"Dina iki aku arep nyritakake babagan iterator."

"Iterators diciptakake praktis bebarengan karo koleksi. Tujuan utama koleksi yaiku kanggo nyimpen unsur, lan tujuan utama iterator yaiku njupuk unsur kasebut siji-siji."

"Apa angel banget babagan njupuk set unsur?"

"Kaping pisanan, unsur-unsur ing sawetara koleksi, kayata Set, ora duwe urutan sing mapan lan / utawa urutan owah-owahan terus-terusan."

"Kapindho, sawetara struktur data bisa nyimpen obyek kanthi cara sing rumit banget: ing macem-macem klompok, dhaptar, lan liya-liyane. Ing tembung liya, nyebarake kabeh unsur kanthi urutan bakal dadi tugas sing ora pati penting."

"Kaping telu, koleksi cenderung owah-owahan. Upaminipun sampeyan arep nampilake kabeh isi koleksi, nanging ing tengah-tengah output JVM ngalih menyang thread liyane sing ngganti setengah saka unsur koleksi. Dadi tinimbang output, sampeyan njaluk sapa ngerti apa."

"Hmm..."

"Nanging! Iki sabenere masalah sing bisa diatasi dening iterator. Iterator minangka obyek khusus ing koleksi sing, ing tangan siji, nduweni akses menyang kabeh data pribadi lan ngerti struktur internal, lan ing tangan liyane. , ngleksanakake antarmuka Iterator umum, sing ngidini saben wong ngerti carane nggarap .

"Sawetara iterator duwe array internal sing kabeh unsur koleksi disalin nalika iterator digawe. Iki mesthekake yen owah-owahan sakteruse kanggo koleksi ora bakal mengaruhi nomer utawa urutan unsur."

"Aku wis teka tengen iki nalika nggarap kanggo saben . Sampeyan ora bisa bebarengan daur ulang liwat koleksi lan mbusak unsur saka iku. Iki kabeh sabenere amarga cara iterator bisa."

"Ing koleksi anyar sing ditambahake ing perpustakaan konkurensi, iterator digarap maneh kanggo ngilangi masalah iki."

"Ayo kula ngelingake sampeyan carane iterator bisa."

"Jawa duwe antarmuka Iterator khusus. Iki cara:"

Metode antarmuka Iterator<E> Katrangan
boolean hasNext() Priksa manawa ana unsur liyane
E next() Ngasilake unsur saiki lan pindhah menyang sabanjure.
void remove() Mbusak unsur saiki

"Interator ngidini sampeyan entuk kabeh unsur koleksi kanthi sukses. Iku luwih logis kanggo mikir iterator kaya InputStream - kabeh data, nanging tugase yaiku ngasilake kanthi urutan."

"   Cara sabanjure () ngasilake unsur sabanjure ing koleksi."

" Cara hasNext () digunakake kanggo mriksa yen ana unsur liyane."

"Lan mbusak () mbusak unsur saiki."

"Ana pitakonan?"

"Yagene metode kasebut duwe jeneng aneh? Apa ora isEmpty () lan getNextElement ()?"

"Apa ora bakal luwih masuk akal?"

"Iku bakal nggawe liyane pangertèn, nanging jeneng teka saka basa C ++, ngendi iterators katon sadurungé."

"Iyo. Ayo diterusake."

"Saliyane iterator, ana uga antarmuka Iterable, sing kudu dileksanakake dening kabeh koleksi sing ndhukung iterator. Wis cara siji: "

Metode antarmuka Iterable<T> Katrangan
Iterator<T>iterator() Ngasilake obyek iterator

"Sampeyan bisa nggunakake metode iki ing sembarang koleksi kanggo njaluk obyek iterator kanggo lumaku liwat unsur sawijining. Ayo lumaku liwat kabeh unsur ing TreeSet a : "

Tuladha
TreeSet<String> set = new TreeSet<String>();
Iterator<String> iterator = set.iterator();

while (iterator.hasNext())
{
 String item = iterator.next();
 System.out.println(item);
}

"Nggunakake iterator kaya iki ora trep banget - ana akeh banget kode superfluous lan ketok. Kahanan dadi luwih prasaja nalika saben loop muncul ing Jawa."

"Saiki kode iki luwih kompak lan bisa diwaca:"

sadurunge Sawise
TreeSet<String> set = new TreeSet<String>();
Iterator<String> iterator = set.iterator();

while (iterator.hasNext())
{
 String item = iterator.next();
 System.out.println(item);
}
TreeSet<String> set = new TreeSet<String>();

for(String item : set)
{
 System.out.println(item);
}

"Iki kode padha! Iterator digunakake ing loro kasus."

"Iku mung sing nggunakake didhelikake ing saben daur ulang. Elinga yen kode ing sisih tengen ora ana teks abang ing kabeh. Panggunaan iterator rampung didhelikake."

"A for-saben daur ulang digunakake kanggo sembarang obyek sing ndhukung iterators. Ing tembung liyane, sampeyan bisa nulis kelas dhewe, nambah iterator ( ) cara kanggo, lan nggunakake obyek ing saben-saben mbangun.

"Wah! Mesthi, aku ora sregep nulis koleksi lan iterator dhewe, nanging prospek isih nggodha. Aku bakal nggawe cathetan."

Kajaba iku, ana jinis iterator populer liyane sing duwe antarmuka dhewe. Aku ngomong babagan iterator kanggo dhaptar, yaiku ListIterator .

Preduli saka implementasine, dhaftar njaga urutan unsur, kang ndadekake karya karo wong liwat iterator sethitik luwih trep.

"Iki cara antarmuka ListIterator <E>:"

Metode Katrangan
boolean hasNext() Priksa manawa ana unsur liyane ing ngarep.
E next() Ngasilake unsur sabanjure.
int nextIndex() Ngasilake indeks saka unsur sabanjuré
void set(E e) Ngganti nilai saka unsur saiki
boolean hasPrevious() Priksa manawa ana unsur ing mburi.
E previous() Ngasilake unsur sadurunge
int previousIndex() Ngasilake indeks saka unsur sadurunge
void remove() Mbusak unsur saiki
void add(E e) Nambahake unsur ing pungkasan dhaptar.

"Ing tembung liyane, ing kene kita bisa maju lan mundur. Lan ana sawetara fitur cilik liyane."

"Lho, barang sing menarik. Endi sing digunakake?"

"Upami sampeyan pengin pindhah bali lan kasebut ing dhaftar disambung. Operasi njaluk bakal rodo alon, nanging sabanjuré () operasi bakal cepet banget ".

"Hmm. Sampeyan yakin aku. Aku bakal tetep ing atine."

"Matur nuwun, Ellie!"