2017-12-19 3 views
0

단위 테스트에서이 문제가 발생합니다.subList() 이후 ConcurrentModificationException

실행 한 후 :

List<Card> cleanCards = cards.subList(0, cards.size() - difference); 

다음 어설 나에게 해, ConcurrentModificationException 제공 :

assertEquals(limit, cleanCards.size()); 

오류 설명 내 지식받는

java.util.ConcurrentModificationException 
at java.util.ArrayList$SubList.size(ArrayList.java:1057) 

'크기() 메소드가 수행 목록을 구조적으로 변경하지 마십시오. 내가 여기서 뭔가를 놓치고 있니?

답변

3

대부분의 경우 원래 목록은 하위 목록 작성과 사용 사이에서 수정됩니다. subList 독립적 새로운 목록을 작성하지 않고, 원래의리스트의 부분의보기를하고 specs

대답이 메소드에 의해 리턴되는리스트의 의미론 배킹 목록 경우 정의 될 (즉, ,이 목록)은 반환 된 목록을 통하지 않고 구조적으로 임의의 방법으로 수정됩니다 ( ). (구조 변경 그렇지 않으면이 목록의 크기를 변경, 또는 그 진행의 반복 처리가 부정한 결과 이러한 List가 흐트러 있습니다.)

및 귀하의 경우

는 "정의되지 않은"행동을 보인다 패스트 패스트 동작이라고도하는 예외가 throw됩니다. I 쉬운 용액 위의 첫 번째 행을 변경하는 것이다 기산

List<Card> cleanCards = new ArrayList<>(cards.subList(0, cards.size() - difference)); 

있는 복사 원의 완전히 새로운리스트에 독립적 인 서브리스트.

+0

정확하게 맞습니다! 감사합니다. – ivopintodasilva