1. Latar mburi carane iterator teka
Sampeyan wis kenal karo HashSet
. Yen sampeyan wis nyelidiki tenan, ngluwihi mung maca pelajaran, mula sampeyan kudu takon pitakonan iki:
Kepiye carane nampilake dhaptar kabeh unsur HashSet ing layar? Sawise kabeh, antarmuka ora duwe get()
lan set()
cara!
Lan HashSet
ora mung ing watesan iki. Kajaba iku HashSet
, ana akeh koleksi liyane sing ora ngidini unsur bisa dijupuk dening indeks, amarga unsur ora urutan ditetepake.
Sajrone pirang-pirang taun, programer wis nemokake akeh struktur data sing kompleks, kayata grafik lan wit. Utawa dhaptar dhaptar.
Akeh wadhah ngganti urutan unsur nalika unsur anyar ditambahake utawa unsur sing wis ana dibusak. Contone, dhaptar nyimpen unsur ing urutan tartamtu, lan nalika unsur anyar ditambahake, meh tansah dilebokake ing tengah dhaftar.
Lan kita uga entuk kahanan sing ana wadhah sing nyimpen unsur nanging ora ana ing urutan tetep.
Saiki ayo ngomong yen kita pengin nyalin kabeh unsur saka koleksi kasebut menyang array utawa dhaptar. Kita kudu njupuk kabeh unsur. Kita ora preduli babagan urutan sing diulang ing unsur - sing penting yaiku ora ngulang unsur sing padha luwih saka sepisan. Kepiye carane nindakake?
2. Iterator kanggo koleksi
Iterator diusulake minangka solusi kanggo masalah ing ndhuwur.
Iterator minangka obyek khusus sing ana gandhengane karo koleksi, sing mbantu ngliwati kabeh unsur koleksi tanpa mbaleni.
Sampeyan bisa nggunakake kode ing ngisor iki kanggo entuk iterator kanggo koleksi apa wae:
Iterator<Type> it = name.iterator();
Endi name
jeneng variabel koleksi, Type
yaiku jinis unsur koleksi, iterator()
minangka salah sawijining metode koleksi, lan it
jeneng variabel iterator.
Objek iterator nduweni 3 cara:
Metode | Katrangan |
---|---|
|
Ngasilake unsur sabanjure ing koleksi |
|
Priksa manawa ana unsur sing durung dilewati |
|
Mbusak unsur koleksi saiki |
Cara kasebut meh padha karo kelas nextInt)
lan hasNextInt()
metode Scanner.
Cara kasebut next()
ngasilake unsur koleksi sabanjure sing entuk iterator.
Cara hasNext()
mriksa apa koleksi duwe unsur tambahan sing iterator durung bali.
Mangkene carane nampilake kabeh unsur a HashSet
:
Kode | Cathetan |
---|---|
|
Nggawe HashSet obyek sing nyimpen String unsur. We nambah salam ing macem-macem basa kanggo set variabel. Entuk obyek iterator kanggo set set kasebut. Anggere isih ana unsur Entuk unsur sabanjure Nampilake unsur ing layar |
3. For-each
gelung
Kerugian utama iterator yaiku kode sampeyan dadi luwih rumit tinimbang nggunakake for
loop.
Kanggo mbandhingake, ayo nampilake dhaptar nggunakake for
loop lan uga nggunakake iterator:
Iterator | kanggo loop |
---|---|
|
|
Ya, luwih apik kanggo ngliwati unsur-unsur nggunakake ArrayList
loop - kabeh dadi luwih cendhek.
Nanging pangripta Jawa maneh mutusaké kanggo pour sawetara gula ing kita. Untunge kanggo kita, iku gula sintaksis .
Padha menehi Jawa jinis loop anyar lan disebut loop for-each
. Iki katon umume:
for(Type name:collection)
Where collection
jeneng variabel koleksi, Type
jinis unsur ing koleksi, lan name
jeneng variabel sing njupuk nilai sabanjuré saka koleksi ing saben pengulangan daur ulang.
Iki jenis loop iterates liwat kabeh unsur koleksi nggunakake iterator implisit. Iki cara kerjane:
Kanggo-saben loop | Apa sing dideleng kompiler: Loop karo iterator |
---|---|
|
|
Nalika kompiler nemoni for-each
loop ing kode sampeyan, mung ngganti kode kasebut ing sisih tengen: nambah telpon kanggo njaluk iterator bebarengan karo telpon metode liyane sing ilang.
Programer seneng for-each
daur ulang lan meh tansah digunakake nalika kudu ngulang kabeh unsur koleksi.
Malah ngulang ArrayList
dhaptar kanthi nggunakake for-each
loop katon luwih cendhek:
Kanggo-saben loop | kanggo loop |
---|---|
|
|
4. Njabut unsur ing for-each
daur ulang
Daur for-each
ulang nduweni siji kekurangan: ora bisa mbusak unsur kanthi bener. Yen sampeyan nulis kode kaya iki, sampeyan bakal entuk kesalahan.
Kode | Cathetan |
---|---|
|
Operasi mbusak bakal ngasilake kesalahan! |
Iki kode apik banget lan dingerteni, nanging ora bisa.
Sampeyan ora bisa ngganti koleksi nalika sampeyan ngliwati karo iterator.
Ana telung cara kanggo ngatasi watesan iki.
1. Gunakake jinis daur ulang sing beda
When traversing an ArrayList collection
, sampeyan bisa nggunakake loop biasa karo i
variabel counter.
Kode |
---|
|
Nanging, pilihan iki ora cocok kanggo HashSet
lan HashMap
koleksi
2. Gunakake iterator eksplisit
Sampeyan bisa nggunakake iterator kanthi tegas lan nelpon remove()
metode kasebut.
Versi sing bisa | Versi sing ora bisa |
---|---|
|
|
Elinga yen kita nelpon remove()
cara ing obyek iterator! Iterator ngerti yen item kasebut wis dibusak lan bisa nangani kahanan kasebut kanthi bener.
3. Gunakake salinan koleksi
Sampeyan uga bisa nggawe salinan koleksi banjur nggunakake salinan ing daur for-each
ulang lan mbusak unsur saka koleksi asli.
Kode | Cathetan |
---|---|
|
Nggawe salinan koleksi gampang banget. Daur ulang nggunakake iterator kanggo salinan koleksi. Unsur dibusak saka list koleksi. |
Koleksi kasebut disalin kanthi cepet, amarga unsur kasebut ora diduplikasi. Nanging, koleksi anyar nyimpen referensi kanggo unsur sing wis ana ing koleksi lawas.
GO TO FULL VERSION