본문 바로가기
IT/Java

[Error] ConcurrentModificationException

by 성준하이 2024. 7. 31.
반응형

ConcurrentModificationException은 보통 Collections 에서 리스트, 맵 등에서 제거하고 난 후에 발생한다.

 

예를들어 리스트가 크기가 10이라서 

..이상 생략
for (int i=0;i <list.size(); i++){
     System.out.println(list[i]);
..이하 생략

으로 반복문을 돌릴때 

리스트의 i번째를 가져온다.

마지막으로 가면 10번째의 값을 가져와야하는데 그전에 만약 remove를 했다면 list의 길이는 10이 아니게 된다.

그럴 경우에 발생하는 에러이다.

 

  • 해결방법

- for loop에서 역순으로 순회하면서 삭제

Array일 경우에 가능하고 0부터올리는것이 아닌 10부터 내려오는 방법이다.

..이상 생략
for (int i=list.size();i>=0; i--){
     System.out.println(list[i]);
..이하 생략

 

- 한번에 removeAll로 삭제

별도의 list 를 만들어서 remove할 대상을 넣어놔둔다.

..이상 생략
ArrayList<String> removeList = new ArrayList<>();
for (int i=0;i <list.size(); i++){
     removeList.add(list[i]);
}
list.removeAll(removeList);
..이하 생략

 

- Iterator 사용

자세한 사용법은 참고 포스팅 참고

 


참고 포스팅

https://thenicesj.tistory.com/696

 

[Java] Iterator

이전 포스팅에서 List, Set, Map 에 대해서 다룬 글이 있다. 자세한 사항은 참고 포스팅 참고 바란다. 포스팅에서는 이 컬렉션 프레임워크(Collection Framework) 들에서 공통으로 사용할수 있는 클래스를

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

[ArrayList] 조건 삭제를 위한 removeIf  (15) 2024.08.02
[Error] incompatible types / Type mismatch  (13) 2024.08.01
HashMap 정렬(Key/Value)  (22) 2024.07.29
Collections 함수에 대해  (19) 2024.07.28
String / StringBuffer,StringBuilder 차이  (14) 2024.07.25

댓글