Java-我如何正确使用list.copyOf? [重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我的问题是我需要复制一个列表,但需要复制一份深层复制。当我修改列表a时,我不想修改列表b。我使用JDK11所以我可以使用list.copyOf,但在我修改a时使用它,b也被修改。难道我做错了什么?

b = List.copyOf(a);
System.out.println("A start:" + b.get(2).getSeating());
System.out.println("B start:" + b.get(2).getSeating());
a.get(2).setSeating(27);
System.out.println("Hi there" );
System.out.println("A end:" + a.get(2).getSeating());
System.out.println("B end:" + b.get(2).getSeating());

该分配的输出:

java list deep-copy
1个回答
1
投票

copyOf方法不进行深层复制,根据documentation它返回一个不可变的视图,即只读列表。它不会复制列表中的元素。要进行深层复制,您基本上需要遍历集合并将元素逐个深层复制到新集合中。在一般情况下,这可能很棘手。有些对象支持克隆,有些对象有自定义复制方法,但在一般情况下,Java没有始终有效的深层复制方法。

简而言之,解决方案根据列表中的内容而有所不同。由于它似乎是您应用程序中的自定义对象,因此最简单的方法是遍历列表并使用您在类中提供的复制构造函数或克隆方法将实例复制到新列表。

© www.soinside.com 2019 - 2024. All rights reserved.