Неуспешни и неуспешни безопасни итератори в Java: Каква е разликата?



Тази статия за „Бързи и неуспешни безопасни итератори“ ще ви помогне да сравните тези два итератора в детайли със съответните примери.

поддържат два типа итератори, първият е бърз, а вторият е безопасен. Те играят жизненоважна роля, когато става въпрос за обработка на изключения в Java. В тази статия за „Fail Fast And Fail Safe Iterators“ ще анализираме работата на двата итератора, както и съществената разлика между тях.

Следват указанията, които ще бъдат обсъдени в тази статия:





как да настроите атом за python

Преди да влезем в подробно обяснение, нека се запознаем с концепцията за едновременна модификация.

Едновременна модификация

Когато една нишка (или множество нишки) се итерира над колекция, тя може да промени структурата на колекцията, или чрез добавяне или изтриване на елемента в колекцията, или чрез актуализиране на стойността на елемента на определена позиция. Този процес е известен като едновременна модификация.



Нека да разгледаме бързо двете системи, които се отнасят до горната тема, преди да влезем в детайлите на същата,

Fail Fast Sysetm:

Система се обозначава като система за бързо отказване, ако се изключи веднага след появата на грешка. Операциите се прекъсват незабавно и се разкриват грешките или грешките.

Безопасна система:

Системата се обозначава като отказоустойчива система, ако те продължават да работят дори след възникнала грешка или грешка. Те не прекъсват операция и скриват грешките, вместо да ги излагат.



Итераторите в java ни позволяват да преминем през обектите на Collection. Итераторите, върнати от колекцията, или се провалят бързо, или са безопасни по своя характер.

Неуспешен бърз итератор

Неуспешните бързи итератори в Java забраняват всякакъв вид структурна модификация на колекция, докато се итерира върху нея. Структурната модификация включва добавяне, премахване или актуализиране на който и да е елемент в колекцията, докато се итерира върху него. Итераторът изхвърля ConcurrentModificationException, ако колекция е структурно модифицирана по време на процеса на итерация.

Трябва обаче да се отбележи, че ако даден елемент бъде премахнат с помощта на собствения метод на итераторите, т.е. методът remove (), не се извежда изключение. Това е напълно безопасен процес. уверете се, че имате инсталирана java на вашата система

Пример за неуспешен бърз итератор:

import java.util.HashMap import java.util.Iterator import java.util.Map публичен клас FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' февруари ') monthIndex.put (' 3 ',' март ') Итератор итератор = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // добавянето на елемент към Map // изключение ще бъде хвърлено при следващото извикване // на метода next (). monthIndex.put ('4', 'април')}}}

Изход:

Изключение в нишката „main“ java.util.ConcurrentModificationException

на java.util.HashMap $ HashIterator.nextEntry (неизвестен източник)

Сега нека продължим и да разгледаме Fail Safe Iterator,

Fail Safe Iterator

За разлика от Fail Fast итераторите, Fail Safe итераторите не създават изключения, ако колекцията е модифицирана по време на процеса на итерация. Това се дължи на факта, че те итерират върху клонинга на колекцията, вместо на действителната колекция. Структурните модификации, извършени върху действителната колекция, остават незабелязани от тях.

Трябва обаче да се отбележи, че няма такова нещо като наистина Fail Safe Iterator. Би било подходящо да го определим като слабо съгласуван. Това просто означава това ако колекция се модифицира по време на процеса на итерация, това, което вижда Итераторът, е слабо гарантирано. Това поведение се различава за различните колекции и е документирано в Javadocs.

Пример за неуспешен итератор:

публичен клас FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'март') Итератор итератор = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( „4“, „април“)}}}

Изход:

какво е hashmap в java
  • Януари
  • Февруари
  • Март

Накрая в тази статия ще сравним тези итератори,

Разлики: Fail Fast и Fail Safe Iterator

По-долу са дадени основните разлики между двата итератора:

Параметри Неуспешен бърз итератор Fail Safe Iterator
Хвърли изключение ConcurrentModification

Да, те хвърлят CocurrentModificationExcepti-on, ако колекция е модифицирана, докато се итерира върху нея.

Не, те не създават никакво изключение, ако колекция е модифицирана, докато се итерира върху нея.

Клонирайте колекцията

Не, те използват оригинална колекция, за да прекосят елементите.

какво е облакът на услугата Salesforce

Да, те използват копието на оригиналната колекция за преминаване.

Режим на паметта

Не, те не изискват допълнителна памет.

Да, те изискват допълнителна памет за клониране на колекцията.

Примери

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Тези итератори са едновременно уникални и много необходими в гъвкавия език на java. Въпреки че отказоустойчивият има успокояващ пръстен, бързият итератор за отказ се оказва здрав.

Това води до края на тази статия. в случай, че искате да научите повече, тогава разгледайте от Edureka. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е създаден, за да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни Java рамки като Hibernate & Spring.

Имате въпрос към нас? Моля, споменете го в раздела за коментари на този блог „Fail Fast vs Fail Safe“ и ние ще се свържем с вас възможно най-скоро.