toetada kahte tüüpi iteraatoreid, esimene on ebaõnnestunud kiiresti ja teine on ebaõnnestunud. Neil on Java-s erandite käsitlemisel oluline roll. Selles artiklis „Fail Fast and Fail Safe Iterators” käsitleme nii kahe iteraatori tööd kui ka nende olulist erinevust.
Selles artiklis käsitletakse järgmisi näpunäiteid:
- Samaaegsed muudatused
- Ebaõnnestub kiire itaator
- Ebaõnnestumise ohutu kordaja
- Ebaõnnestunud vs ebaõnnestunud ohutu iteraator
Enne üksikasjaliku selgituse leidmist tutvuge samaaegse muutmise mõistega.
Samaaegne muutmine
Kui üks lõim (või mitu lõime) kordub kogu üle, võib see muuta kogu struktuuri, lisades või kustutades kogumis oleva elemendi või värskendades elemendi väärtust kindlas asukohas. Seda protsessi nimetatakse samaaegseks modifitseerimiseks.
Vaatame kiiresti üle kaks teemat puudutavat süsteemi, enne kui asume selle üksikasjadesse,
Ebaõnnestunud kiire süsteem:
Süsteem on varustatud tõrkekindla süsteemiga, kui see lülitub välja kohe pärast tõrke ilmnemist. Toimingud katkestatakse koheselt ja tõrked või vead paljastatakse.
Ebaõnnestumissüsteem:
Kui süsteem jätkab töötamist ka pärast tõrke või tõrke tekkimist, on süsteem märgitud tõrkekindlaks. Nad ei katkesta toimingut ja varjavad vigu selle asemel, et neid paljastada.
mis on HTML-i sildimärk
Java iteraatorid võimaldavad meil kogu kollektsiooni objektide vahel liikuda. Kollektsiooni tagastatud iteraatorid on kas ebaõnnestunud kiiresti või ebaõnnestunult.
Ebaõnnestub kiire itaator
Ebaõnnestunud Java-i iteraatorid ei luba kollektsioonil ühtegi struktuurimuudatust, kordades seda. Struktuurimuutmine hõlmab kogu kollektsiooni mis tahes elemendi lisamist, eemaldamist või värskendamist samal ajal selle iteratsiooni tehes. Kui iteratsiooni käigus on kogu struktuuriliselt modifitseeritud, viskab iteraator välja ConcurrentModificationExceptioni.
Siiski tuleb märkida, et kui üksus eemaldatakse iteraatorite enda meetodi abil, st eemalda () meetod, ei tehta erandit. See on täiesti ohutu protsess. veenduge, et teil on java installitud oma süsteemis
Ebaõnnestunud iteraatori näide:
import java.util.HashMap import java.util.Iterator import java.util.Map avalik klass FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iteraatori iteraator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // elemendi lisamine kaardile // erand visatakse järgmise () meetodi järgmise kõne // korral. kuuIndex.put ('4', 'aprill')}}}
Väljund:
Erand lõimes „main” java.util.ConcurrentModificationException
aadressil java.util.HashMap $ HashIterator.nextEntry (tundmatu allikas)
Vaatame nüüd faili Fail Safe Iterator,
Ebaõnnestumise ohutu kordaja
Erinevalt Fail Fast iteraatoritest ei tekita Fail Safe Iterators erandeid, kui kollektsiooni iteratsiooni käigus muudetakse. Selle põhjuseks on asjaolu, et nad korduvad tegeliku kollektsiooni asemel kogu kloonil. Tegeliku kollektsiooni struktuurimuudatused jäävad neile märkamatuks.
Tuleb siiski tähele panna, et tõeliselt ebaõnnestumiskindlat iteraatorit pole olemas. Oleks kohane nimetada seda nõrgalt järjepidevaks. See tähendab lihtsalt seda kui iteratsiooni käigus modifitseeritakse kogu, mida itaator näeb, nõrgalt tagatud. See käitumine on eri kogude puhul erinev ja see on dokumenteeritud Javadocsis.
Tõrkekindla iteraatori näide:
public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'märts') Iteraatori iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'aprill')}}}
Väljund:
- Jaanuar
- Veebruar
- Märts
Lõpuks võrdleme selles artiklis neid kordajaid,
Erinevused: ebaõnnestub kiiresti ja ebaõnnestub iteraator
Allpool on toodud kahe iteraatori vahelised olulised erinevused:
Parameetrid | Ebaõnnestub kiire itaator | Ebaõnnestumise ohutu kordaja |
Viska samaaegne modifitseerimise erand | Jah, nad viskavad CocurrentModificationExcepti-sisse, kui kogu on korduv, kui seda üle korratakse. | Ei, nad ei tee ühtegi erandit, kui kogu muudetakse selle iteratsiooni ajal. |
Kloonige kogu | Ei, nad kasutavad elementide kohal liikumiseks originaalkollektsiooni. | Jah, nad kasutavad läbimiseks originaalkogu koopiat. |
Mälu ülal | Ei, nad ei vaja lisamälu. | Jah, nad vajavad kollektsiooni kloonimiseks lisamälu. |
Näited | HashMap, Vector, ArrayList, HashSet | CopyOnWriteArrayList |
Need iteraatorid on nii unikaalsed kui ka java mitmekülgses keeles väga vajalikud. Kuigi tõrkekindlal on lohutav rõngas, osutub tõrkekindel iteraator tugevaks.
See viib selle artikli lõpuni. kui soovite rohkem teada saada, siis vaadake autor Edureka. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud selleks, et anda teile Java-programmeerimises algust ja õpetada teid nii Java-põhiprogrammide kui ka täiustatud kontseptsioonide jaoks koos erinevate Java-raamistikega nagu Hibernate & Spring.
Kas teil on meile küsimus? Palun mainige seda selle ajaveebi „Fail Fast vs Fail Safe“ kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.