2013-05-01 57 views
1

我试图将项目添加到列表的列表。 partitionsStrings列表的LinkedList。我试图将一个项目添加到分区列表中某个分区的开头,但我得到ConcurrentModificationException,尽管我使用的是名为partitionsCopy的列表副本。Java - ConcurrentModificationException在添加到列表时

有没有办法做到这一点?所有我能找到的关于如何删除项目或使用ListIterator添加项目的例子,但在特定的位置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); 

这是我不能添加项目我从jtahlborn的回答中得出了什么结论。

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

是分区复制一个深层复制? – 2013-05-01 13:09:49

+0

http://stackoverflow.com/questions/993025/java-adding-elements-to-a-collection-during-iteration – 2013-05-01 13:10:35

+0

'partitionsCopy'确实是List的一个副本,而不仅仅是另一个引用'List'?你在哪里初始化该变量? – 2013-05-01 13:10:37

回答

1

你的问题不在于partitionsCopy,它与无论是在partitionsCopy(嵌套表),因为这是你实际上修改列表。当您将partitions复制到partitionsCopy时,您只是将引用复制到嵌套列表。你是而不是复制嵌套列表本身。

+0

谢谢,工作完美 – labatyo 2013-05-01 13:54:37

相关问题