当我使用subList时,我遇到了ConcurrentModificationException的问题。
我的问题是: safe是否可以使用subList创建新的集合?
示例:
List<T> list = new LinkedList<T>(someList.subList(0,n));结果列表必须是原始列表的独立列表。
对不起,我的英语不好。
发布于 2011-06-07 02:16:15
如果你需要子列表是可修改的,这大概是最简单的方法。
发布于 2011-06-07 02:17:12
在没有看到更多代码的情况下,我假设另一个线程可能正在修改someList的内容,在这种情况下,您将需要实现某种同步策略,例如,当您试图从其中提取一个子列表时,使用synchronized块 --这是在蒙混过关。
synchronized(someList){
// get sublist
}编辑
如果您试图在迭代过程中从子列表中删除一个元素,我建议使用iterator.remove(),因为
通过定义良好的语义,
迭代器允许调用者在迭代期间从基础集合中移除元素
发布于 2011-06-07 03:42:21
在单线程环境中,在创建独立列表时,创建列表所做的操作是安全的。
由于您没有明确说明,我假设异常是在该行代码执行时发生的。这意味着在创建新的LinkedList时,您有另一个线程在修改列表。
根据源列表是什么,您可能还会遇到其他问题,除非它是某种类型的同步列表。如果不是,它的行为可能是非常不可预测的。
如果我关于异常在该行中的假设是不正确的,那么请在异常发生的地方发布代码,因为很容易发现它是否在单个线程中完成。
https://stackoverflow.com/questions/6256245
复制相似问题