자바가 나타나다.util.ConcurrentModificationException 문제 및 해결 방법
선언:
iterator를 사용하고 있습니다.hasNext () 가 교체기를 조작할 때, 이 때 교체된 대상이 바뀌면, 예를 들어 새 데이터를 삽입하거나 삭제됩니다.
를 사용하여 다음 예외를 보고합니다.
Java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$KeyIterator.next(HashMap.java:828)
예를 들어 다음 프로그램(인터넷에서 시작):
mport java.util.*;
public class Main
{
public static void main(String args[])
{
Main main = new Main();
main.test();
}
public void test()
{
Map bb = new HashMap();
bb.put("1", "wj");
bb.put("2", "ry");
Iterator it = bb.keySet().iterator();
while(it.hasNext()) {
Object ele = it.next();
bb.remove(ele); //wrong
}
System.out.println("Success!");
}
}
원인: Iterator가 두루 훑어볼 때 HashMap이 수정(bb.remove(ele),size-1)되고, Iterator(Object ele=it.next()되면 HashMap의 크기를 검사하고,size가 변하여 오류가 발생합니다.해결 방법:
1) Iterator를 통해 Hashtable 수정
while(it.hasNext()) {
Object ele = it.next();
it.remove();
}
2) 실제 프로그램에 따라 Iterator가 돌아다니는 프로그램에 수동으로 자물쇠를 채우고, HashMap을 수정하는 프로그램에 자물쇠를 넣는다.3) "ConcurrentHashMap"을 사용하여 HashMap을 교체하면 ConcurrentHashMap이 직접 수정 작업을 검사하고 잠그거나 삽입 작업에 사용할 수 있습니다.
import java.util.concurrent.*;
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.