Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 还需要一份包含对象副本的ArrayList副本_Java_Arraylist_Copy_Clone - Fatal编程技术网

Java 还需要一份包含对象副本的ArrayList副本

Java 还需要一份包含对象副本的ArrayList副本,java,arraylist,copy,clone,Java,Arraylist,Copy,Clone,您好,我正在尝试创建一个ArrayList,其中包含原始ArrayList中对象的副本。我在这里搜索过,但无法理解足够多的早期帖子以获得帮助。下面是我试图复制的数组列表 ArrayList<Stuff> originallist = new ArrayList<Stuff>(); ArrayList originallist=新的ArrayList(); 抱歉,如果重新发布 一般来说,这不是必须的,因为这取决于对象的复制方式 假设该对象有一个名为copyOf的方法返回

您好,我正在尝试创建一个ArrayList,其中包含原始ArrayList中对象的副本。我在这里搜索过,但无法理解足够多的早期帖子以获得帮助。下面是我试图复制的数组列表

ArrayList<Stuff> originallist = new ArrayList<Stuff>();
ArrayList originallist=新的ArrayList();

抱歉,如果重新发布

一般来说,这不是必须的,因为这取决于对象的复制方式

假设该对象有一个名为copyOf的方法返回该对象的副本,则需要执行以下操作

ArrayList<Stuff> copy = new ArrayList<Stuff>(originallist.size());
for (Stuff s : originallist) {
    copy.add(s.copyOf());
}
arraylistcopy=newarraylist(originallist.size());
用于(s:原创者){
copy.add(s.copyOf());
}
“copyOf”功能可能来自很多地方。如果一个对象实现了可克隆接口,这可能是该函数的一个来源(但有各种原因不鼓励使用该接口)。有些类包含从现有实例创建副本的构造函数,在这种情况下,您可以

ArrayList<Stuff> copy = new ArrayList<Stuff>(originallist.size());
for (Stuff s : originallist) {
    copy.add(new Stuff(s));
}
arraylistcopy=newarraylist(originallist.size());
用于(s:原创者){
复制。添加(新材料);
}
在其他情况下,可能必须使用访问字段的方法(例如,使用保留名字和姓氏的Person对象)

arraylistcopy=newarraylist(originallist.size());
对于(人员s:原创者){
copy.add(新的Person(s.getFirstName(),s.getLastName());
}

为了确定如何做到这一点,您应该查看“Stuff”对象的api指南。列表本身的实际复制很容易。

您阅读了这里给出的解释吗?现在我已经阅读了。如果我创建一个浅层副本,它是只包含对对象内存中同一点的引用,还是创建了所有对象的副本?根据定义,浅层副本包含对相同对象的引用。这篇文章已经解释过,内置的
集合。copy
不会创建深层副本,而是创建浅层副本。要获得深度副本,您需要创建一个新列表,然后为旧列表中的每个元素创建一个深度副本,最后将其添加到新列表中。这里的深度副本意味着将对象x的字节复制到内存中的一个新位置,并获取对新深度复制对象的引用,只是为了完整性。
ArrayList<Person> copy = new ArrayList<Person>(originallist.size());
for (Person s : originallist) {
    copy.add(new Person(s.getFirstName(),s.getLastName()));
}