如何复制Java Collections列表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何复制Java Collections列表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1446字,纯文字阅读大概需要3分钟。
内容图文
我有一个ArrayList,我想完全复制它.我假设有人花了一些时间使其正确,我尽可能使用实用程序类.很自然地,我最终得到了包含复制方法的Collections类.
假设我有以下内容:
List<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");
List<String> b = new ArrayList<String>(a.size());
Collections.copy(b,a);
这失败了,因为基本上它认为b不足以容纳一个.是的我知道b的大小为0,但现在它应该足够大了不应该吗?如果我必须首先填充b,那么Collections.copy()在我的脑海中变成一个完全无用的函数.那么,除了编写一个复制函数(我现在要做的)之外,还有一种正确的方法吗?
解决方法:
调用
List<String> b = new ArrayList<String>(a);
创建b内的浅表副本.所有元素都将以与它们在a中的完全相同的顺序存在于b中(假设它有一个订单).
同样,打电话
// note: instantiating with a.size() gives `b` enough capacity to hold everything
List<String> b = new ArrayList<String>(a.size());
Collections.copy(b, a);
还会在b中创建一个浅表副本.如果第一个参数b没有足够的容量(不是大小)来包含所有的元素,那么它将抛出一个IndexOutOfBoundsException.期望Collections.copy不需要分配工作,如果有,则抛出该异常.要求复制的集合被预先分配(b)是一种优化,但我通常不认为该特征是值得的,因为给定基于构造函数的替代方案所需的检查,如上所示,没有奇怪的副作用.
要创建深层副本,List通过任一机制都必须具有基础类型的复杂知识.在Strings的情况下,它在Java(和.NET)中是不可变的,你甚至不需要深层复制.对于MySpecialObject,您需要知道如何对其进行深层复制,这不是一般操作.
注意:最初接受的答案是Google中Collections.copy的最高结果,如评论中所指出的那样,这是错误的.
内容总结
以上是互联网集市为您收集整理的如何复制Java Collections列表全部内容,希望文章能够帮你解决如何复制Java Collections列表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。