Sobes.tech
Junior — Middle

Ի՞նչ է տեղի ունենում, եթե խոչընդոտենք տարրերի հեռացմանը հավաքածուից նրա շրջելիս։

sobes.tech AI

Պատասխան AI-ից

Եթե Java-ում հավաքածուի վրա կրկնություն կատարելիս փորձեք տարրերը ուղղակիորեն հեռացնել (օրինակ՝ հավաքածուի մեթոդով), դա կհանգեցնի ConcurrentModificationException-ի։ Դա տեղի է ունենում, քանի որ ինտերատորը հետևում է հավաքածուի փոփոխություններին, և նրա մեթոդներից դուրս հեռացումները խախտում են կրկնության ամբողջականությունը։

Սխալ եղանակը տարրերը հեռացնելու համար կրկնության ժամանակ՝ օգտագործել ինտերատորի remove() մեթոդը՝

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (պայման) {
        iterator.remove(); // անվտանգ հեռացում
    }
}

Այս կերպ հեռացումը չի խանգարի ինտերատորի աշխատանքին և սխալ չի առաջացնի։