我正在尝试编写一个程序来进行深层复制List<List<Integer>>
,我正在这样做:
public static List<List<Integer>> clone(final List<List<Integer>> src)
{
List<List<Integer>> dest = new ArrayList<List<Integer>>();
for( List<Integer> sublist : src) {
List<Integer> temp = new ArrayList<Integer>();
for(Integer val: sublist) {
temp.add(val);
}
dest.add(temp);
}
return dest ;
}
这是一个好方法吗?是否可以摆脱内循环?事实上,每个内部子列表都可以增长到很大的长度。
这是一个好方法吗?
没关系。
是否可以摆脱内循环?
是的,您可以使用ArrayList
复制构造函数:
for( List<Integer> sublist : src) {
dest.add(new ArrayList<>(sublist));
}
事实上,每个内部子列表都可以增长到很大的长度。
上面将缩短代码,并将其委托给System.arraycopy
,这可能会稍微提高性能 https://stackoverflow.com/a/18639042/1553851。它还避免了填充空时重复调整大小/复制ArrayList
。但是,如果您确实需要深度复制,则基本上没有办法避免复制列表/数组的 O(n) 时间复杂度。既然你不解释why你需要一份深层副本,我只能相信你的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)