Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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中将元素添加到listB而不添加到listA_Java_List - Fatal编程技术网

在java中将元素添加到listB而不添加到listA

在java中将元素添加到listB而不添加到listA,java,list,Java,List,我有两个列表(listA和listB),我希望它们是独立的。因此,我可以在不修改listA元素的情况下向listB添加一个元素,以保持不变 Tryed Collection listB=Collections.unmodifiableCollection(listA) ArrayList listA=new ArrayList(); listA.添加(“alex”); listA.添加(“brian”); 列表a.添加(“查尔斯”); ArrayList listB=新的ArrayList();

我有两个列表(listA和listB),我希望它们是独立的。因此,我可以在不修改listA元素的情况下向listB添加一个元素,以保持不变

Tryed Collection listB=Collections.unmodifiableCollection(listA)

ArrayList listA=new ArrayList();
listA.添加(“alex”);
listA.添加(“brian”);
列表a.添加(“查尔斯”);
ArrayList listB=新的ArrayList();
listB=listA;
列表B.添加(“威廉姆斯”);
System.out.println(listA);
运行: [亚历克斯、布赖恩、查尔斯、威廉姆斯]

当我运行它时,我只想显示SE
运行: [alex,brian,charles]

(没有“williams”)

当您执行
listB=listA
时,您只是将listA的引用分配给listB,而不是创建新对象。
要创建新对象,请按如下所示复制列表

List<String> listB = new ArrayList<>(listA);
List listB=新的数组列表(listA);
ArrayList listA=new ArrayList();
listA.添加(“alex”);
listA.添加(“brian”);
列表a.添加(“查尔斯”);
ArrayList listB=(ArrayList)listA.clone();
列表B.添加(“威廉姆斯”);
System.out.println(listA);
系统输出打印项次(列表B);

您可以使用SerializationUtils.clone()方法


为了将一个列表的所有元素添加到另一个列表中,您可以简单地使用addAll方法

就你而言:

listB.addAll(listA);

您的问题是如何在Java中克隆
List
,有很多方法可以做到这一点:

  • 使用复制构造函数:使用Java中的ArrayList构造函数,可以使用另一个集合中的元素初始化新列表
List listB=新的数组列表(listA);
  • 使用addAll()方法:List类有一个名为addAll()的方法,该方法将一个集合的所有元素附加到列表中
List listB=new ArrayList();
listB.addAll(listA);
  • 在Java 8中使用streams使用,可以克隆列表。collect()方法(连同方法)用于克隆列表
List listB=listA.stream().collect(Collectors.toList());
  • 使用Gson库将列表转换为JSON:使用谷歌的Gson库,列表可以转换为JSON。此JSON字符串可以转换为List类型的对象,并可用于初始化新列表
String jsonListA=gson.toJson(listA);
List listB=gson.fromJson(jsonListA,List.class);

您需要将原始列表复制到新对象。您可以对第一个列表进行流式处理,并在新列表中收集元素:

List<String> listB = listA.stream().collect(Collectors.toList());
List listB=listA.stream().collect(Collectors.toList());

请注意,使用复制构造函数(如
new ArrayList(listA)
)或使用addAll方法,两个列表的内容将引用相同的对象,一个元素中的每个修改都将影响两个列表。

您应该将
listA
克隆为
listB
,在添加到
listB
之前,该类
SerializationUtils
类在哪里定义?可能会鼓励使用指向文档的引用链接…它包含在“commons-lang.jar”中。首先将该jar添加为依赖项,然后导入“import org.apache.commons.lang3.SerializationUtils”
private static void deepCopy(){
    ArrayList<String> listA = new ArrayList<>();
    listA.add("alex");
    listA.add("brian");
    listA.add("charles");
    ArrayList<String> listB = SerializationUtils.clone(listA);
    listB.add("williams");
    System.out.println(listA);
    System.out.println(listB);

}
[alex, brian, charles]
[alex, brian, charles, williams]
listB.addAll(listA);
List<String> listB = listA.stream().collect(Collectors.toList());