在Java中合并两个列表通常是一个有用的操作,这些列表可以是ArrayLists或LinkedLists。
如何在Java中合并两个列表
我们可以在Java中合并两种列表的方法有很多,让我们探索一些简单的方法来完成你的工作!
使用 addAll() 方法合并两个列表
addAll() 方法是将两个列表合并的最简单、最常见的方式。
- 对于 ArrayList :**
1import java.util.ArrayList;
2
3public class Main {
4
5 public static void main(String[] args)
6 {
7ArrayList<Integer> l1 = new ArrayList<Integer>();
8 l1.add(1);
9 l1.add(3);
10 l1.add(5);
11ArrayList<Integer> l2 = new ArrayList<Integer>();
12 l2.add(2);
13 l2.add(4);
14 l2.add(6);
15ArrayList<Integer> merge = new ArrayList<Integer>();
16 merge.addAll(l1);
17 merge.addAll(l2);
18System.out.println("L1 : "+l1);
19System.out.println("L2 : "+l2);
20System.out.println("Merged : "+merge);
21}
22}
请注意,元素的出现顺序与 addAll() 呼叫的顺序相匹配。
** 对于链接列表:**
1import java.util.LinkedList;
2
3public class Main {
4
5 public static void main(String[] args)
6 {
7LinkedList<Integer> L1 = new LinkedList<>();
8 L1.add(1);
9 L1.add(3);
10 L1.add(5);
11LinkedList<Integer> L2 = new LinkedList<>();
12 L2.add(2);
13 L2.add(4);
14 L2.add(6);
15LinkedList<Integer> merged = new LinkedList<>();
16 merged.addAll(L1);
17 merged.addAll(L2);
18
19System.out.println("L1 : "+L1);
20System.out.println("L2 : "+L2);
21System.out.println("Merged : "+merged);
22}
23}
使用迭代器在Java中合并两个列表
我们可以使用Iterator来穿过列表并合并。
- 对于 ArrayList :**
1import java.util.ArrayList;
2
3public class Main {
4
5 public static void main(String[] args)
6 {
7ArrayList<Integer> l1 = new ArrayList<Integer>();
8 l1.add(1);
9 l1.add(3);
10 l1.add(5);
11ArrayList<Integer> l2 = new ArrayList<Integer>();
12 l2.add(2);
13 l2.add(4);
14 l2.add(6);
15
16ArrayList<Integer> Itmerge = new ArrayList<>();
17 Iterator i = l1.iterator();
18 while (i.hasNext()) {
19 Itmerge.add((int)i.next());
20 }
21 i=l2.iterator();
22 while (i.hasNext()) {
23 Itmerge.add((int)i.next());
24 }
25System.out.println("L1 : "+l1);
26System.out.println("L2 : "+l2);
27System.out.println("Merged : "+Itmerge);
28}
29}
Iterator 首先穿过 ArrayList l1 并将所有元素添加到 Itmerge,然后穿过 ArrayList l2 并将所有元素添加到 Itmerge。
** 将两个列表合并的另一种方法是简单地将一个列表中的元素添加到另一个列表中。
1Iterator i = l1.iterator();
2while (i.hasNext())
3{
4 l2.add((int)i.next());
5}
6
7System.out.println("Merged : "+l2);
在这种情况下,所有元素都被添加到列表l2中,这节省了在创建额外列表时所花费的内存。
关于LinkedIn:**
1import java.util.LinkedList;
2
3public class Main {
4
5 public static void main(String[] args)
6 {
7LinkedList<Integer> L1 = new LinkedList<>();
8 L1.add(1);
9 L1.add(3);
10 L1.add(5);
11LinkedList<Integer> L2 = new LinkedList<>();
12 L2.add(2);
13 L2.add(4);
14 L2.add(6);
15LinkedList<Integer> merged = new LinkedList<>();
16
17 Iterator i = L1.iterator();
18 while (i.hasNext()) {
19 L2.add((int)i.next());
20 }
21System.out.println(L2);
22}
23}
3. 合并多个列表使用为循环
对于循环,将两个列表合并也是有用的。
对于 ArrayList:**
1import java.util.ArrayList;
2
3public class Main {
4
5 public static void main(String[] args)
6 {
7ArrayList<Integer> l1 = new ArrayList<Integer>();
8 l1.add(1);
9 l1.add(3);
10 l1.add(5);
11ArrayList<Integer> l2 = new ArrayList<Integer>();
12 l2.add(2);
13 l2.add(4);
14 l2.add(6);
15ArrayList<Integer> Itmerge = new ArrayList<>();
16 for(int i=0;i<l1.size();i++){
17 Itmerge.add(l1.get(i));
18 }
19 for(int i=0;i<l2.size();i++){
20 Itmerge.add(l2.get(i));
21 }
22System.out.println(Itmerge);
23}
24}
循环通过两个 ArrayLists,并将每个元素一个接一个添加到新创建的列表中。
将一个列表中的元素添加到另一个列表中将节省额外的跨路。
1for(int i=0;i<l2.size();i++){
2 l1.add(l2.get(i));
3 }
4System.out.println(l1);
这个循环将l2的元素添加到l1一个接一个,在这种情况下,l1将包含合并元素的最终列表。
关于LinkedIn:**
为了更好地理解链接列表的跨度,让我们定义自己的链接列表。
一个节点需要两个东西,数据和下一个节点的地址。
类节点的代码:
1public class node {
2 int data;
3 node next;
4 public node(int data){
5 this.data=data;
6 next=null;
7 }
8}
请注意,下一个类型为节点,因为它存储一个节点的地址。
1public class Main {
2
3 public static void main(String[] args)
4 {
5 node head = new node(1);
6 node temp = new node(3);
7 head.next=temp;
8 node temp1 = new node(5);
9 temp.next=temp1;
10 node head2 = new node(2);
11 node temp2 = new node(4);
12 head2.next=temp2;
13 node temp3 = new node(6);
14 temp2.next=temp3;
15}
16}
** 这将创建类似的列表:**
每个箭头代表下一个链接. 要将两个列表连接在一起,我们需要将一个列表的末尾链接到第二个列表的头。
可以这样做:
1node trav=head;
2while(trav.next!=null){
3 trav=trav.next;
4}
5trav.next=head2;
一个节点trav
被启动并指向第一个列表的头部,第一个列表被穿越,直到 trav 到达第一个列表的尽头。
当到达终点时,它将最后一个节点的下一个链接更改为第二个列表的头,从而形成两个列表之间的链接。
** 打印所有列表:**
1public class Main {
2
3 public static void main(String[] args)
4 {
5 node head = new node(1);
6 node temp = new node(3);
7 head.next=temp;
8 node temp1 = new node(5);
9 temp.next=temp1;
10 node head2 = new node(2);
11 node temp2 = new node(4);
12 head2.next=temp2;
13 node temp3 = new node(6);
14 temp2.next=temp3;
15
16//printing list 1
17 System.out.println("List 1 :");
18 node trav = head;
19
20 while(trav!=null){
21 System.out.print(trav.data + " ");
22 trav=trav.next;
23 }
24
25 System.out.println();
26//prinitng list 2
27 System.out.println("List 2 :");
28 trav= head2;
29
30 while(trav!=null){
31 System.out.print(trav.data + " ");
32 trav=trav.next;
33 }
34 System.out.println();
35
36//merging the two list
37
38 trav=head;
39 while(trav.next!=null){
40 trav=trav.next;
41 }
42 trav.next=head2;
43// printing merged list
44 System.out.println("merged list :");
45 trav = head;
46 while(trav!=null){
47 System.out.print(trav.data + " ");
48 trav=trav.next;
49 }
50}
51}
结论
我们看到了在Java中合并两种列表的不同方法,这些方法从内置函数到循环的基本功能。上面的最后一个例子对Java中的列表如何工作提供了更深入的理解。