首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >subList()的Java用法

subList()的Java用法
EN

Stack Overflow用户
提问于 2011-06-07 02:14:00
回答 3查看 3.2K关注 0票数 0

当我使用subList时,我遇到了ConcurrentModificationException的问题。

我的问题是: safe是否可以使用subList创建新的集合?

示例:

代码语言:javascript
复制
List<T> list = new LinkedList<T>(someList.subList(0,n));

结果列表必须是原始列表的独立列表。

对不起,我的英语不好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-07 02:16:15

如果你需要子列表是可修改的,这大概是最简单的方法。

票数 4
EN

Stack Overflow用户

发布于 2011-06-07 02:17:12

在没有看到更多代码的情况下,我假设另一个线程可能正在修改someList的内容,在这种情况下,您将需要实现某种同步策略,例如,当您试图从其中提取一个子列表时,使用synchronized块 --这是在蒙混过关。

代码语言:javascript
复制
synchronized(someList){
    // get sublist
}

编辑

如果您试图在迭代过程中从子列表中删除一个元素,我建议使用iterator.remove(),因为

通过定义良好的语义,

迭代器允许调用者在迭代期间从基础集合中移除元素

票数 2
EN

Stack Overflow用户

发布于 2011-06-07 03:42:21

在单线程环境中,在创建独立列表时,创建列表所做的操作是安全的。

由于您没有明确说明,我假设异常是在该行代码执行时发生的。这意味着在创建新的LinkedList时,您有另一个线程在修改列表。

根据源列表是什么,您可能还会遇到其他问题,除非它是某种类型的同步列表。如果不是,它的行为可能是非常不可预测的。

如果我关于异常在该行中的假设是不正确的,那么请在异常发生的地方发布代码,因为很容易发现它是否在单个线程中完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6256245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档