我在使用子列表时遇到ConcurrentModificationException
问题。Java使用subList()
我的问题是: 是否安全使用子列表创建新的集合?
实施例:
List<T> list = new LinkedList<T>(someList.subList(0,n));
结果列表必须是原始列表的独立名单。
对不起,我的英语。
我在使用子列表时遇到ConcurrentModificationException
问题。Java使用subList()
我的问题是: 是否安全使用子列表创建新的集合?
实施例:
List<T> list = new LinkedList<T>(someList.subList(0,n));
结果列表必须是原始列表的独立名单。
对不起,我的英语。
如果您需要子列表可修改,这是关于最简单的方法。
@Francisco,这个答案解决了你的'ConcurrentModificationException'吗? – mre 2011-06-06 18:32:57
在某种程度上,是的,我只是在看别人可以告诉我是否从另一个列表创建列表是安全的方式,而且我没有抛出更多的ConcurrentModificationException。谢谢。 – 2011-06-06 19:29:43
没有看到更多的代码,我假设另一个线程可能修改的someList
的内容,在这种情况下,你需要实现某种同步的政策,如synchronized块当您尝试从中提取一个子列表 - 那就是我在黑暗中拍摄。
synchronized(someList){
// get sublist
}
编辑
如果你试图删除从子列表中的元素在遍历它的中间,我会用iterator.remove()建议这样做,因为
迭代器允许调用者在重复期间从 集合中删除 集合中的元素 明确定义的语义
在单线程环境中,您在创建列表时如何创建独立列表是安全的。
由于您没有特别说明,所以我假定正在执行该行代码时发生异常。这意味着当新的LinkedList被创建时,你有另一个线程修改列表。
根据源列表是什么,您可能还有其他问题,除非它是某种同步列表。如果不是,它的行为可能是非常不可预测的。
如果我关于该行异常的假设是错误的,那么请将代码发布到发生异常的地方,因为很容易找到它是否在单个线程中完成。
以什么方式安全? – 2011-06-06 18:15:53
请发布更多行代码。 – Asaph 2011-06-06 18:16:20
后来修改de list的方式很安全。 – 2011-06-06 18:30:22