在java中将元素添加到listB而不添加到listA
我有两个列表(listA和listB),我希望它们是独立的。因此,我可以在不修改listA元素的情况下向listB添加一个元素,以保持不变 Tryed Collection listB=Collections.unmodifiableCollection(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();
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());