atbalsta divu veidu iteratorus, no kuriem viens ir ātrs, bet otrais nedarbojas. Tiem ir būtiska loma, ja runa ir par izņēmumu apstrādi Java. Šajā rakstā par “Fail Fast Fast and Fail Safe Iterators” mēs analizēsim divu atkārtotāju darbību, kā arī būtisko atšķirību starp tiem.
ko skeneris dara java
Šajā rakstā ir apskatāmi norādījumi:
- Vienlaicīgas modifikācijas
- Neveiksme ātri atkārtotājs
- Neveiksmīgs atkārtotājs
- Fail Fail vs vs Fail Safe Iterator
Pirms sākat detalizētu skaidrojumu, ļaujiet mums iepazīties ar vienlaicīgas modifikācijas jēdzienu.
Vienlaicīga modifikācija
Ja viens pavediens (vai vairāki pavedieni) atkārtojas pa kolekciju, tas var mainīt kolekcijas struktūru, vai nu pievienojot vai dzēšot kolekcijas elementu, vai arī atjauninot elementa vērtību noteiktā vietā. Šis process ir pazīstams kā vienlaicīga modifikācija.
Ļaujiet mums ātri apskatīt abas sistēmas, kas attiecas uz iepriekš minēto tēmu, pirms iedziļināties tās pašas detaļās,
Neveiksmīga ātrā sistēma:
Sistēma tiek apzīmēta kā sistēma, kas ātri neizdodas, ja tā tiek izslēgta tūlīt pēc kļūdas rašanās. Darbības tiek nekavējoties pārtrauktas un tiek atklātas kļūmes vai kļūdas.
Neveiksmīga sistēma:
Sistēma tiek apzīmēta kā droša sistēma, ja tā turpina darboties arī pēc kļūmes vai kļūdas. Viņi neatceļ darbību un slēpj kļūdas, nevis tās atklāj.
Iteratori java ļauj mums šķērsot kolekcijas objektus. Kolekcijas atdotajiem atkārtotājiem pēc būtības ir vai nu ātrs, vai arī drošs.
Neveiciet ātru atkārtotāju
Ja Java ātri neizdodas, iteratori neatļauj jebkāda veida strukturālas modifikācijas kolekcijā. Strukturālā modifikācija ietver jebkura kolekcijas elementa pievienošanu, noņemšanu vai atjaunināšanu, atkārtojot to. Ja iterācijas procesā strukturāli tiek modificēta kolekcija, iterators izmet ConcurrentModificationException.
Tomēr jāatzīmē, ka, ja vienums tiek noņemts, izmantojot iteratoru pašu metodi, t.i., metodi remove (), izņēmums netiek izmests. Tas ir pilnīgi drošs process. pārliecinieties, ka esat java instalēta jūsu sistēmā
Fail Fast Iterator piemērs:
importēt java.util.HashMap importēt java.util.Iterator importēt java.util.Map publiskā klase FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' Februāris ') monthIndex.put (' 3 ',' Marts ') Iteratora iterators = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // elementa pievienošana Map // izņēmums tiks izmests nākamās metodes // nākamās sarunas laikā. monthIndex.put ('4', 'April')}}}
Izeja:
Izņēmums pavedienā “main” java.util.ConcurrentModificationException
vietnē java.util.HashMap $ HashIterator.nextEntry (Nezināms avots)
Tagad ļaujiet mums iet uz priekšu un apskatīt Fail Safe Iterator,
Neveiksmīgs atkārtotājs
Atšķirībā no Fail Fast iteratoriem, Fail Safe iterators neizmet nekādus izņēmumus, ja kolekcija tiek modificēta iterācijas procesā. Tas ir saistīts ar faktu, ka viņi atkārtojas kolekcijas klonā, nevis faktiskajā kolekcijā. Faktiskās kolekcijas strukturālās modifikācijas viņiem paliek nepamanītas.
Tomēr jāņem vērā, ka nav tādas lietas kā patiesi Fail Safe Iterator. Būtu pareizi to nosaukt par vāji konsekventu. Tas vienkārši nozīmē ja Kolekcija tiek modificēta iterācijas procesā, un tas, ko Iterators redz, tiek vāji garantēts. Šī uzvedība dažādās kolekcijās atšķiras un ir dokumentēta Javadocs.
Neveiksmīga atkārtotāja piemērs:
public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'Janvāris') monthIndex.put ('2', 'Februāris') monthIndex.put ( '3', 'marts') Iterator iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'aprīlis')}}}
Izeja:
- Janvāris
- Februāris
- Martā
Visbeidzot, šajā rakstā mēs salīdzināsim šos atkārtotājus,
Atšķirības: ātri neizdoties un neizturīgs atkārtotājs
Tālāk ir norādītas būtiskās atšķirības starp abiem atkārtotājiem:
Parametri | Neveiksme ātri atkārtotājs | Neveiksmīgs atkārtotājs |
Mest vienlaicīgu modifikācijas izņēmumu | Jā, viņi met CocurrentModificationExcepti-on, ja kolekcija tiek modificēta, atkārtojot to. | Nē, viņi neizmet izņēmumus, ja kolekcija tiek modificēta, atkārtojot to. |
Klonējiet kolekciju | Nē, viņi izmanto oriģinālo kolekciju, lai šķērsotu elementus. | Jā, viņi šķērsošanai izmanto oriģinālās kolekcijas kopiju. |
Atmiņa virs galvas | Nē, viņiem nav nepieciešama papildu atmiņa. | Jā, kolekcijas klonēšanai viņiem nepieciešama papildu atmiņa. |
Piemēri | HashMap, Vector, ArrayList, HashSet | CopyOnWriteArrayList |
Šie iteratori ir unikāli un ļoti nepieciešami daudzveidīgajā java valodā. Neskatoties uz to, ka atteices drošībai ir mierinošs gredzens, izrādās, ka atteices ātruma atkārtotājs ir izturīgs.
Tas noved pie šī raksta beigām. Ja vēlaties uzzināt vairāk, iepazīstieties ar autore Edureka. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts, lai dotu jums iespēju sākt Java programmēšanu un apmācīt gan pamata, gan uzlabotas Java koncepcijas kopā ar dažādām Java sistēmām, piemēram, Hibernate & Spring.
Vai mums ir jautājums? Lūdzu, pieminējiet to šī emuāra “Fail Fast vs Fail Safe” komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.