2013-05-01 3 views
1

목록 목록에 항목을 추가하려고합니다. partitionsStrings 목록의 LinkedList입니다. 파티션 목록의 파티션 중 하나의 시작 부분에 항목을 추가하려고하는데 partitionsCopy이라는 목록의 복사본을 사용하고 있는데도 ConcurrentModificationException이 표시됩니다.Java - ConcurrentModificationException이 목록에 추가 될 때

이렇게 할 방법이 있습니까? 모든 I 항목을 제거하거나 ListIterator을 사용하여 항목을 추가하는 방법에 대한 예는 찾을 수 있습니다,하지만 난

int index = 0; 
for (List<String<?>> partition : partitions) { 
    if (index > 0) { 
     partitionsCopy.get(index).add(0, lastPartition.get(lastPartition.size() - 1)); 
    } 
    lastPartition = partition; 
    index++; 
} 

partitionsCopy이

List<List<String<?>>> partitionsCopy = new LinkedList<List<String<?>>>(); 
partitionsCopy.addAll(partitions); 

처럼 보이는 ListIterator가 여기에 특정 위치에 항목을 추가 할 수 없습니다 jtahlborn의 대답에서 나왔습니다. 그건 당신이 실제로 수정중인 목록이 그대로

for (List<String<?>> partition : partitions) { 
    List<String<?>> list = new ArrayList<String<?>>(); 
    list.addAll(partition); 
    partitionsCopy.add(list); 
    } 
+3

partitionsCopy는 전체 복사본입니까? –

+0

http://stackoverflow.com/questions/993025/java-adding-elements-to-a-collection-during-iteration –

+0

'partitionsCopy'는 실제로 동일한 목록에 대한 다른 참조가 아니라'List' 사본입니다. 'List'? 그 변수를 어디에 초기화합니까? –

답변

1

귀하의 문제는, 그것이partitionsCopy (중첩 된 목록)에서 무엇이든과의, partitionsCopy하지입니다. partitionspartitionsCopy에 복사하면 중첩 목록에 대한 참조 만 복사됩니다. 이 아니며 중첩 목록 자체를 복사하는 것은 아닙니다.입니다.

+0

감사합니다. 완벽하게 작업했습니다. – labatyo

관련 문제