【问题标题】:Deep copy of an ArrayList which collects ArrayLists收集 ArrayList 的 ArrayList 的深层副本
【发布时间】:2014-02-02 23:32:33
【问题描述】:

我需要一种进行深层复制的方法..它作为参数ArrayList<Arraylist<Integer>>m 并对另一个 ArrayList 进行深度复制,该 ArrayList 也收集 ArrayLists ... 一切都需要深度复制。但没有循环只能递归......

有人可以帮我怎么做吗?

【问题讨论】:

  • 你没有展示任何不好的作品
  • 好吧,我可以递归地制作 arraylist 的深拷贝。但是,我不知道该怎么做,因为 arraylist 里面有 arraylists。我不能使用 arraylists 复制构造函数,因为它是浅拷贝。 .

标签: java recursion arraylist deep-copy


【解决方案1】:

我认为下面的代码可以满足您的限制并且类似于您想要实现的目标:

public ArrayList<ArrayList<Integer>> deepCopy(ArrayList<ArrayList<Integer>> list) {
    ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>>();
    deepCopy(list.iterator, ret);
    return ret;
}

private void deepCopy(Iterator<ArrayList<Integer>> it, ArrayList<ArrayList<Integer>> ret) {
    if (it.hasNext()) {
        ret.add(new ArrayList(it.next()));
        deepCopy(it, ret);
    }
}

它只是访问列表并递归地创建新列表。

但对于整数,没有有趣的用例……这是作业吗?

【讨论】:

  • 它实际上将所有整数值复制到 arraylist 内的一个 arraylist 中。其他的已创建但内部为空..我在这里看到什么问题吗?
  • “但里面是空的”,对不起,我不明白你的这部分陈述。复制构造函数使用这些值创建一个新数组。确实,整数实例将保持不变。虽然我上面提出的想法也适用于那里。 (虽然我会使用 Integer.valueOf(...) 而不是 new Integer(...),所以可能不会有太大区别。)
猜你喜欢
  • 2011-10-25
  • 2017-06-23
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 2012-01-21
相关资源
最近更新 更多