컬렉션에서 특정 요소를 삭제하려는 경우가 많습니다. 어떤 사람들은 이렇게 쓸 수도 있습니다.
다음과 같이 코드 코드를 복사합니다 .
public void Operate(목록 목록){
for (반복자 it = list.iterator(); it.hasNext();) {
문자열 str = (String)it.next();
if (str.equals("chengang")){
목록.제거(str);
}
}
}
이 쓰기 방법이 실행되자마자 다음 예외가 보고됩니다.
스레드 "main"의 예외 java.util.ConcurrentModificationException
java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)에서
루프에 있는 동안에는 목록의 요소를 삭제할 수 없기 때문입니다. 나중에 저는 매우 어리석은 방법을 사용했습니다. 아이디어는 다음과 같습니다. 삭제할 요소를 구체적으로 저장하는 목록을 만든 다음 List.removeAll 메서드를 사용하여 요소를 삭제합니다. 코드는 다음과 같습니다:
다음과 같이 코드 코드를 복사합니다 .
public void Operate(목록 목록){
목록 제거목록= new ArrayList();
for (반복자 it = list.iterator(); it.hasNext();) {
문자열 str = (String)it.next();
if (str.equals("chengang")){
제거목록.추가(str);
}
}
list.removeAll(removeList);
}
이것은 실제로 문제를 해결할 수 있지만 방법이 너무 번거롭습니다. 실제로 다음과 같이 Iterator.remove 메서드를 사용하는 더 간단하고 효율적인 방법이 있을 수 있습니다.
다음과 같이 코드 코드를 복사합니다 .
for (반복자 it = list.iterator(); it.hasNext();) {
문자열 str = (String)it.next();
if (str.equals("chengang")){
it.remove();
}
}
따라서 Java의 기본 사항을 더 많이 알수록 코드가 더 간단해집니다. 반대로, 코드가 특히 복잡하다면 방법이나 디자인에 문제가 있는 것입니다.