java list的拷贝_如何将java.util.List复制到另一个java.util.List中

问题

我有一个从Web服务填充的aList。我想将该列表的内容复制/克隆到相同类型的空列表中。谷歌搜索复制列表建议我使用Collections.copy()方法。在我看到的所有示例中,目标列表应该包含要进行复制的确切项目数。

由于我使用的列表是通过Web服务填充的,它包含数百个对象,我不能使用上述技术。或者我使用它错了?? !!无论如何,为了使它工作,我试图做这样的事情,但我仍然有一个IndexOutOfBoundsException。

List wsList = app.allInOne(template);

List wsListCopy=new ArrayList(wsList.size());

Collections.copy(wsListCopy,wsList);

System.out.println(wsListCopy.size());

我尝试使用wsListCopy=wsList.subList(0, wsList.size())但我在代码中得到了aConcurrentAccessException。命中和审判。 :)

无论如何,我的问题很简单,**如何将列表的整个内容复制到另一个列表中?**当然不是通过迭代。

#1 热门回答(181 赞)

只需使用:

List newList = new ArrayList(otherList);

注意:仍然不是线程安全的,如果你从另一个线程修改otherList,那么你可能想要制作那个otherList(甚至是55247698)aCopyOnWriteArrayList,或者使用一个锁原语,例如ReentrantReadWriteLock来序列化对同时访问的任何列表的读/写访问。

#2 热门回答(21 赞)

这是一个非常好的Java 8方法:

List list2 = list1.stream().collect(Collectors.toList());

当然,这里的优点是你可以过滤并跳过仅列出部分列表的副本。

例如

//don't copy the first element

List list2 = list1.stream().skip(1).collect(Collectors.toList());

#3 热门回答(6 赞)

我试图做这样的事情,但我仍然有一个IndexOutOfBoundsException。我收到了ConcurrentAccessException

这意味着你在尝试复制列表时正在修改列表,很可能是在另一个线程中。要解决这个问题,你必须要么

使用专为并发访问而设计的集合。

适当地锁定集合,以便你可以迭代它(或允许你调用为你执行此操作的方法)

找一个离开,以避免需要复制原始列表。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值