Greitai nesėkmingi ir nesėkmingi „Java“ kartotojai: koks skirtumas?



Šis straipsnis apie „Nepavykusius ir nepavykusius iteratorius“ padės išsamiai palyginti šiuos du iteratorius su atitinkamais pavyzdžiais.

palaikykite dviejų tipų iteratorius: pirmasis iš jų greitai sugenda, o antrasis - nesėkmingas. Tai vaidina svarbų vaidmenį, kai kalbama apie išimčių tvarkymą „Java“. Šiame straipsnyje „Nesėkmingi ir nesėkmingi iteratoriai“ analizuosime dviejų iteratorių darbą ir esminį jų skirtumą.

koks skirtumas tarp gito ir gitubo

Toliau pateikiami patarimai, kuriuos reikia aptarti šiame straipsnyje:





Prieš pradėdami išsamų paaiškinimą, leiskite susipažinti su tuo pačiu modifikavimo samprata.

Kartu modifikavimas

Kai viena gija (ar kelios gijos) kartojasi per kolekciją, ji gali pakeisti rinkinio struktūrą, pridėdamas arba ištrindamas elementą kolekcijoje, arba atnaujindamas elemento vertę tam tikroje vietoje. Šis procesas yra žinomas kaip lygiagretus modifikavimas.



Greitai pažvelkime į dvi pirmiau nurodytas sistemas, prieš pradėdami nagrinėti tą pačią informaciją,

Nepavyko greitai susisteminti:

Sistema yra pažymėta kaip nepavykusi sistema, jei ji išsijungia iškart po klaidos. Operacijos nedelsiant nutraukiamos, o gedimai ar klaidos yra matomos.

Nepavykusi saugi sistema:

Sistema yra pažymėta kaip nepavojinga sistema, jei ji ir toliau veikia net po gedimo ar įvyko klaida. Jie nenutraukia operacijos ir paslepia klaidas, užuot jas atskleidę.



Java itteratoriai leidžia mums pereiti per kolekcijos objektus. Kolekcijos grąžinti iteratoriai greitai sugenda arba nepavyksta.

Nepavyko greitai kartoti

Nesėkmingi „Java“ iteratoriai neleidžia bet kokio tipo struktūrinio modifikavimo rinkiniui kartojant. Struktūrinis modifikavimas apima bet kokio kolekcijos elemento pridėjimą, pašalinimą ar atnaujinimą kartojant jį. Jei iteracijos metu kolekcija yra struktūriškai modifikuota, iteratorius išmeta „ConcurrentModificationException“.

Tačiau reikia pažymėti, kad jei elementas pašalinamas naudojant paties iteratorių metodą, t. Y. „Remove ()“ metodas, jokia išimtis nemetama. Tai visiškai saugus procesas. įsitikinkite, kad turite java įdiegta jūsų sistemoje

„Fail Fast Iterator“ pavyzdys:

importuoti java.util.HashMap importuoti java.util.Iterator importuoti java.util.Map viešosios klasės FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iterator iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // elemento pridėjimas į žemėlapį // išimtis bus mestas kito skambučio // metu kitas () metodas. monthIndex.put ('4', 'April')}}}

Išvestis:

Išimtis temoje „main“ java.util.ConcurrentModificationException

adresu java.util.HashMap $ HashIterator.nextEntry (nežinomas šaltinis)

Dabar pažvelkime į „Fail Safe Iterator“,

„Fail Safe Iterator“

Skirtingai nei „Fail Fast iterators“, „Fail Safe iteratoriai“ nemeta jokių išimčių, jei kolekcija modifikuojama kartojant procesą. Taip yra dėl to, kad jie kartojasi kolekcijos klone, o ne tikrojoje kolekcijoje. Struktūriniai pakeitimai, atlikti tikroje kolekcijoje, jų nepastebi.

Tačiau reikia pastebėti, kad nėra tokio dalyko, kaip tikrai nepavykęs „Iterator“. Būtų tikslinga tai pavadinti silpnai nuoseklia. Tai paprasčiausiai reiškia jei Kolekcija modifikuojama iteracijos proceso metu, o tai, ką mato Iteratorius, yra silpnai garantuota. Šis elgesys skiriasi skirtingose ​​kolekcijose ir yra dokumentuojamas „Javadocs“.

„Fail Safe Iterator“ pavyzdys:

public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( „3“, „Kovas“) Iterator iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( „4“, „Balandis“)}}}

Išvestis:

  • Sausio mėn
  • Vasario mėn
  • Kovas

Pagaliau šiame straipsnyje mes palyginsime šiuos iteratorius,

Skirtumai: greitai nepavyksta ir nepavyksta saugoti iteratoriaus

Toliau pateikiami esminiai dviejų iteratorių skirtumai:

Parametrai Nepavyko greitai kartoti „Fail Safe Iterator“
Mesti ConcurrentModification Išimtis

Taip, jie išmeta „CocurrentModificationExcepti-on“, jei kolekcija yra modifikuojama kartojant ją.

Ne, jie nemeta jokių išimčių, jei kolekcija yra modifikuojama kartojant ją.

Klonuokite kolekciją

Ne, jie naudoja originalią kolekciją norėdami pereiti per elementus.

Taip, jie naudoja originalios kolekcijos kopiją.

Atmintis virš galvos

Ne, jiems nereikia papildomos atminties.

Taip, norint klonuoti kolekciją, jiems reikia papildomos atminties.

Pavyzdžiai

„HashMap“, „Vector“, „ArrayList“, „HashSet“

„CopyOnWriteArrayList“

Šie iteratoriai yra unikalūs ir labai reikalingi universalia java kalba. Nors gedimų saugus žiedas yra paguodžiantis, greito gedimo iteratorius pasirodo esąs tvirtas.

Tai užbaigia šio straipsnio pabaigą. jei norite sužinoti daugiau, patikrinkite pateikė Edureka. „Edureka“ „Java J2EE“ ir „SOA“ mokymo ir sertifikavimo kursai yra skirti suteikti jums galimybę pradėti programuoti „Java“ ir išmokyti jus tiek pagrindinėms, tiek pažangioms „Java“ koncepcijoms kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šio tinklaraščio „Fail Fast vs Fail Safe“ komentarų skyriuje ir mes kuo greičiau susisieksime su jumis.