当前位置: 首页 > 面试题库 >

如何制作一个List类型的ArrayList对象的副本?

韩阳云
2023-03-14
问题内容

我研究过Java是按值传递对象引用,并且为了创建对象的本地副本,我可以执行clone()或copy-constructor。我还查看了深/浅副本以及关于stackoverflow的几篇文章。

现在我看一个例子:

List<String> list = new ArrayList<String>();
String one = "one"
list.add(one);

我只读过几篇文章提到ArrayList实现可克隆,但是并没有真正说出如果类型为List而不是不实现可克隆的ArrayList,那么如何制作“列表”的本地副本。

如果“列表”是ArrayList的类型,则可以调用clone()。

ArrayList<String> list = new ArrayList<String();
list.clone();

但是,如果类型是列表,我就不能。

我应该只使用下面的复制构造函数进行本地复制吗?复制“列表”的最佳方法是什么?

List<String> tmpList = new ArrayList<String>(list);

问题答案:

将列表传递到构造函数中可能是最好的方法。构造函数调用本身将在后台使用System.arraycopy。因此,它将有效地将本地副本与通过构造函数传递的列表分离。



 类似资料:
  • 问题内容: 我如何才能向中添加一堆类,然后再从中检索一个类(派生自,但不是),并使用它来生成实际检索到的类的新对象(即,因为那不是抽象的) 所有需要添加的类都源自同一个 抽象 基类() 我真的想不出另一种方法来实现自己的目标,所以希望这是可能的…? 问题答案: 为了防止使用反射,您可能正在寻找抽象工厂模式。这是一个简单的示例,说明如何使用Java 8实现它:

  • 我有一个Employee类对象的arraylist。每个员工都有id、fname、lname等。我需要获取员工id所在元素的索引,例如1234521953。如何找到员工所在的索引?每个身份证都是独一无二的这就是为什么我要通过身份证找到他。 这是我的班级成员: 我将它们添加到:

  • 问题内容: 我有一个如下的示例程序: 我以为我可以修改其中的项目,而不会影响其中的这些项目。但是我错了。 如何制作的单独副本/克隆? 谢谢 问题答案: 是的,这是正确的- 您需要实现(或另一种合适的机制来复制对象,这被许多程序员认为“破坏了”)。您的方法应该对对象内所有可变字段进行深层复制。这样,对克隆对象的修改将不会影响原始对象。 在示例代码中,您正在创建第二个代码,并使用 对相同对象的引用 填

  • 如何创建具有整数和字符串输入类型的?如果我创建一个: 这将是一个类型。如果我将其创建为: 这将是类型。我如何创建一个,它可以接受整数和字符串输入类型?谢谢。

  • 问题内容: 下面的行给我错误: 是什么原因? 编辑 我知道如果我将第二个ArrayList更改为List,它不会给我错误。我想知道错误的原因。谢谢 问题答案: 如果您有一个,则可以向其中添加一个。但您不能这样做,因此后者可能不是的一种。

  • 问题内容: 如何制作在不可变对象中包含可变字段的可变对象的防御性副本? MutableObject没有让我设置字段的构造函数。 MutableObject的当前状态应该在Immutable Object中捕获,并且永远不要更改。 问题答案: 您需要做的是 改成: 有关说明,请参见http://www.javapractices.com/topic/TopicAction.do?Id=15