将一个ArrayList的元素复制到另一个ArrayList中
这是List接口的实现类。它允许重复的对象/元素,并保持插入顺序。你可以通过它的索引获取ArrayList中的元素,现在你需要将它传递给getting(index)方法。你可以使用add()方法将元素添加到ArrayList中。
语法:
ArrayList<Integer> gfg=new ArrayList<>();
将一个ArrayList的元素复制到另一个ArrayList中
有两种方法,第一种方法你只需要将一个ArrayList的引用传递给另一个ArrayList,在这种情况下,如果你在一个ArrayList中的值或元素上做出改变,你会在另一个ArrayList中看到相同的改变。第二种方法是你将创建实际的副本,这意味着如果你在一个ArrayList元素中进行改变,它不会反映在另一个ArrayList中。
方法1:使用赋值运算符(=)
在这种方法中,我们只需将第一个ArrayList的引用赋给第二个ArrayList,但这里有一个重要的方面要注意,我们没有创建一个新的对象,我们只是将第二个ArrayList指向第一个ArrayList。因此,如果您对第一个ArrayList进行更改,第二个ArrayList中也会反映出来,因为您使用的是同一个对象。我们也可以改变一个ArrayList的一个值,并在另一个中查看相同的值是否已更改。
语法:
ArrayList<Integer> gfg=new ArrayList<>();
ArrayList<Integer> gfg2=gfg;
下面是上述问题陈述的实现。
// Java Program for copying one ArrayList to another
import java.io.*;
import java.util.ArrayList;
class GFG {
public static void main(String[] args)
{
// creation of ArrayList of Integers
ArrayList<Integer> gfg = new ArrayList<>();
// adding elements to first ArrayList
gfg.add(10);
gfg.add(21);
gfg.add(22);
gfg.add(35);
// Assigning the first reference to second
ArrayList<Integer> gfg2 = gfg;
// Iterating over second ArrayList
System.out.println(
"-----Iterating over the second ArrayList----");
for (Integer value : gfg2) {
System.out.println(value);
}
// here we changed the third element to 23
// we changed in second list and you can
// see the same change in the first Arraylist
gfg2.set(2, 23);
System.out.println("third element of first list ="
+ gfg.get(2));
System.out.println("third element of second list ="
+ gfg2.get(2));
}
}
输出:
-----Iterating over the second ArrayList----
10
21
22
35
third element of first list =23
third element of second list =23
方法2:通过构造函数传递
在这种方法中,我们只需将第一个ArrayList传递给第二个ArrayList的构造函数。使用这种方法,如果我们改变一个ArrayList元素/值,它不会影响另一个ArrayList,因此这是我们实际创建副本的方法。我们也可以改变一个ArrayList的一个值,并在另一个中查看相同的值是否已更改。
语法:
ArrayList<Integer> gfg=new ArrayList<>();
ArrayList<Integer> gfg2=new ArrayList<>(gfg);
下面是上述问题陈述的实现。
// Java程序:将一个ArrayList复制到另外一个ArrayList
import java.io.*;
import java.util.ArrayList;
class GFG {
public static void main(String[] args)
{
// 声明一个ArrayList
ArrayList<Integer> gfg = new ArrayList<>();
// 向第一个ArrayList添加元素
gfg.add(10);
gfg.add(21);
gfg.add(22);
gfg.add(35);
// 在构造器中传入第一个ArrayList
ArrayList<Integer> gfg2 = new ArrayList<>(gfg);
// 遍历第二个ArrayList
System.out.println(
"-----遍历第二个ArrayList----");
for (Integer value : gfg2) {
System.out.println(value);
}
// 在这里我们改变了第三个元素为23
// 我们在第二个列表中进行修改,而你不会在第一个列表中看到相同的修改
gfg2.set(2, 23);
System.out.println("第一个列表的第三个元素 ="
+ gfg.get(2));
System.out.println("第二个列表的第三个元素 ="
+ gfg2.get(2));
}
}
输出
-----遍历第二个ArrayList----
10
21
22
35
第一个列表的第三个元素 =22
第二个列表的第三个元素 =23
方法3:使用add()方法一个一个添加
在这种方法中,我们将遍历第一个ArrayList的每个元素,并将其添加到第二个ArrayList中。在这里,如果您更改第一个ArrayList元素,则不会更改第二个ArrayList的元素。我们还可以更改一个ArrayList的一个值,并查看另一个ArrayList中是否已更改。
语法:
ArrayList<Integer> gfg = new ArrayList<>();
ArrayList<Integer> gfg2 = new ArrayList<>();
for (Integer val : gfg) {
gfg2.add(val);
}
下面是上述问题陈述的实现:
// Java程序:将一个ArrayList复制到另外一个ArrayList
import java.io.*;
import java.util.ArrayList;
class GFG {
public static void main(String[] args)
{
// 声明一个ArrayList
ArrayList<Integer> gfg = new ArrayList<>();
// 向第一个ArrayList添加元素
gfg.add(10);
gfg.add(21);
gfg.add(22);
gfg.add(35);
ArrayList<Integer> gfg2 = new ArrayList<>();
// 一个一个添加元素到第二个ArrayList中
for (Integer value : gfg) {
gfg2.add(value);
}
// 遍历第二个ArrayList
System.out.println(
"-----遍历第二个ArrayList----");
for (Integer value : gfg2) {
System.out.println(value);
}
// 在这里我们改变了第三个元素为23
// 我们在第二个列表中进行修改
// 在这里你不会在第一个列表中看到相同的修改
gfg2.set(2, 23);
System.out.println("第一个列表的第三个元素 ="
+ gfg.get(2));
System.out.println("第二个列表的第三个元素 ="
+ gfg2.get(2));
}
}
输出
-----遍历第二个ArrayList----
10
21
22
35
第一个列表的第三个元素 =22
第二个列表的第三个元素 =23
方法4:使用addAll()方法
使用addAll()方法将一个ArrayList中的所有元素添加到另一个ArrayList中。对于这个实现,我们必须导入的包是 java.util.*。
步骤1:声明ArrayList 1并向其中添加值。
第2步:创建另一个相同类型的ArrayList 2。
第3步:现在,只需要使用方法addAll()将一个ArrayList中的值添加到另一个ArrayList中。指定 ArrayList2.addAll(ArrayList1) 。
第4步:现在,打印ArrayList 2。
import java.util.*;
class GFG {
public static void main(String[] args)
{
ArrayList<String> AL1 = new ArrayList<>();
AL1.add("geeks");
AL1.add("forgeeks");
AL1.add("learning");
AL1.add("platform");
ArrayList<String> AL2 = new ArrayList<>();
AL2.addAll(AL1);
System.out.println("Original ArrayList : " + AL1);
System.out.println("Copied ArrayList : " + AL2);
}
}
输出结果
Original ArrayList : [geeks, forgeeks, learning, platform]
Copied ArrayList : [geeks, forgeeks, learning, platform]
方法5:使用List.copyOf()方法
List.copyOf()方法用于将一个ArrayList的元素添加到另一个ArrayList中。要使用此方法,我们必须导入包 **java.util.List.*** 或 **java.util.*** 。这是一个静态工厂方法。
步骤1:声明ArrayList 1并向其添加值。
步骤2:创建另一个相同类型的ArrayList 2。
第3步:现在,只需要使用List.copyOf()方法将一个ArrayList中的值添加到另一个ArrayList中。在新创建的ArrayList 2的构造函数中指定 List.copyOf(ArrayList1) 。
第4步:现在,打印ArrayList 2。
import java.util.*;
class GFG {
public static void main(String[] args)
{
ArrayList<String> AL1 = new ArrayList<>();
AL1.add("geeks");
AL1.add("forgeeks");
AL1.add("learning");
AL1.add("platform");
ArrayList<String> AL2
= new ArrayList<>(List.copyOf(AL1));
System.out.println("Original ArrayList : " + AL1);
System.out.println("Copied Arraylist : " + AL2);
}
}
输出结果
Original ArrayList : [geeks, forgeeks, learning, platform]
Copied Arraylist : [geeks, forgeeks, learning, platform]
时间复杂度: O(N),其中 N 是ArrayList的大小。
辅助空间: O(N)
方法6:使用clone()方法
在Java中,clone()方法用于将整个对象值复制到另一个对象中,而不会对对象产生任何副作用。
步骤1:声明ArrayList 1并向其添加值。
步骤2:创建另一个相同类型的ArrayList 2。
步骤3:现在,只需使用方法.clone()将一个ArrayList中的值添加到另一个ArrayList中。在clone()方法之前指定引用类型以进行类型转换。
步骤4:现在,打印ArrayList 2。
/*package whatever //do not write package name here */
import java.util.*;
import java.io.*;
class GFG {
public static void main (String[] args) {
ArrayList<String> AL1 = new ArrayList<>();
AL1.add("geeks");
AL1.add("forgeeks");
AL1.add("learning");
AL1.add("platform");
ArrayList<String> AL2= new ArrayList<>();
AL2 = (ArrayList)AL1.clone();
System.out.println("Original ArrayList : " + AL1);
System.out.println("Copied Arraylist : " + AL2);
}
}
输出结果:
Original ArrayList : [geeks, forgeeks, learning, platform]
Copied Arraylist : [geeks, forgeeks, learning, platform]
极客教程