首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何克隆二维表?

如何克隆二维表?
EN

Stack Overflow用户
提问于 2013-02-03 20:35:39
回答 4查看 601关注 0票数 0

我想克隆列表:

代码语言:javascript
复制
public List<List<Test>> a = new ArrayList<List<Test>>();
public List<List<Test>> b = new ArrayList<List<Test>>();

但如果我这么做了:

代码语言:javascript
复制
b = (ArrayList<List<Test>>)a.clone();

出现错误:

代码语言:javascript
复制
The method clone() is undefined for the type List<List<Test>>

你能帮帮我吗?

EN

回答 4

Stack Overflow用户

发布于 2013-02-03 20:41:39

java.util.List不实现Cloneable,因此编译器不能确保您正在使用的具体实现能够实现。因此,它不允许您编写调用可能不存在的方法的代码。

如果你知道具体的实现,你可以转换它。V.g.,如果它是一个ArrayList<List<Test>> (因为ArrayList实现了Cloneable),那么您需要

代码语言:javascript
复制
  b = (List<List<Test>>) ((ArrayList<List<Test>>) a).clone();

如果不这样做,请实现您自己的方法。

请记住,默认的clone会进行浅层复制。也就是说,返回的对象将是一个新的List<List<Test>>,但是内部的List<Test>Test不会被复制,您将获得对原始对象的引用。

票数 1
EN

Stack Overflow用户

发布于 2013-02-03 20:42:32

clone()不适用于抽象列表,仅适用于ArrayList。但是,它不会像您预期的那样工作,因为它只返回一个浅拷贝。要制作深度副本,您需要循环克隆:

代码语言:javascript
复制
   for (List<Test> item: a)
      b.add(new ArrayList(item);
票数 1
EN

Stack Overflow用户

发布于 2013-02-03 20:41:58

使用构造函数或addAll方法:

代码语言:javascript
复制
new ArrayList<>(a);
//or
b.addAll(a);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14672527

复制
相关文章

相似问题

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