在 Java 中合并两个列表通常是一个有用的操作。这些列表可以是 ArrayList 或 LinkedList。
在 Java 中,我们可以通过多种方式合并两个列表。让我们探索一些简单的方法来完成您的工作!
addAll() 方法是合并两个列表的最简单且最常见的方法。
对于数组列表:
import java.util.ArrayList;
public class Main {
public static void main(String[] args)
{
ArrayList<Integer> l1 = new ArrayList<Integer>();
l1.add(1);
l1.add(3);
l1.add(5);
ArrayList<Integer> l2 = new ArrayList<Integer>();
l2.add(2);
l2.add(4);
l2.add(6);
ArrayList<Integer> merge = new ArrayList<Integer>();
merge.addAll(l1);
merge.addAll(l2);
System.out.println("L1 : "+l1);
System.out.println("L2 : "+l2);
System.out.println("Merged : "+merge);
}
}
请注意,元素出现的顺序与调用 addAll() 的顺序相匹配。
对于链接列表:
import java.util.LinkedList;
public class Main {
public static void main(String[] args)
{
LinkedList<Integer> L1 = new LinkedList<>();
L1.add(1);
L1.add(3);
L1.add(5);
LinkedList<Integer> L2 = new LinkedList<>();
L2.add(2);
L2.add(4);
L2.add(6);
LinkedList<Integer> merged = new LinkedList<>();
merged.addAll(L1);
merged.addAll(L2);
System.out.println("L1 : "+L1);
System.out.println("L2 : "+L2);
System.out.println("Merged : "+merged);
}
}
我们可以使用迭代器来遍历列表并合并。
对于数组列表:
import java.util.ArrayList;
public class Main {
public static void main(String[] args)
{
ArrayList<Integer> l1 = new ArrayList<Integer>();
l1.add(1);
l1.add(3);
l1.add(5);
ArrayList<Integer> l2 = new ArrayList<Integer>();
l2.add(2);
l2.add(4);
l2.add(6);
ArrayList<Integer> Itmerge = new ArrayList<>();
Iterator i = l1.iterator();
while (i.hasNext()) {
Itmerge.add((int)i.next());
}
i=l2.iterator();
while (i.hasNext()) {
Itmerge.add((int)i.next());
}
System.out.println("L1 : "+l1);
System.out.println("L2 : "+l2);
System.out.println("Merged : "+Itmerge);
}
}
Iterator首先遍历ArrayList l1并将所有元素添加到Itmerge中,然后遍历ArrayList l2并将所有元素添加到Itmerge中。
合并两个列表的另一种方法是简单地将元素从一个列表添加到另一个列表。除非您需要保持现有数据完整,否则无需创建新列表。
Iterator i = l1.iterator();
while (i.hasNext())
{
l2.add((int)i.next());
}
System.out.println("Merged : "+l2);
在这种情况下,所有元素都被添加到列表 l2 中。这节省了创建额外列表所花费的内存。将一个列表的元素添加到另一个列表可以节省额外的遍历。
对于链表:
import java.util.LinkedList;
public class Main {
public static void main(String[] args)
{
LinkedList<Integer> L1 = new LinkedList<>();
L1.add(1);
L1.add(3);
L1.add(5);
LinkedList<Integer> L2 = new LinkedList<>();
L2.add(2);
L2.add(4);
L2.add(6);
LinkedList<Integer> merged = new LinkedList<>();
Iterator i = L1.iterator();
while (i.hasNext()) {
L2.add((int)i.next());
}
System.out.println(L2);
}
}
For 循环对于合并两个列表也很有用。
对于数组列表:
import java.util.ArrayList;
public class Main {
public static void main(String[] args)
{
ArrayList<Integer> l1 = new ArrayList<Integer>();
l1.add(1);
l1.add(3);
l1.add(5);
ArrayList<Integer> l2 = new ArrayList<Integer>();
l2.add(2);
l2.add(4);
l2.add(6);
ArrayList<Integer> Itmerge = new ArrayList<>();
for(int i=0;i<l1.size();i++){
Itmerge.add(l1.get(i));
}
for(int i=0;i<l2.size();i++){
Itmerge.add(l2.get(i));
}
System.out.println(Itmerge);
}
}
该循环遍历两个 ArrayList 并将每个元素一一添加到新创建的列表中。
将一个列表的元素添加到另一个列表可以节省额外的遍历。
for(int i=0;i<l2.size();i++){
l1.add(l2.get(i));
}
System.out.println(l1);
这个 for 循环将 l2 的元素一一添加到 l1 中。在这种情况下,l1 将包含合并元素的最终列表。
对于链表:
为了更好地理解链表的遍历,让我们定义自己的链表。
这将需要一个节点类。一个节点需要两个东西,数据和下一个节点的地址。
类节点的代码:
public class node {
int data;
node next;
public node(int data){
this.data=data;
next=null;
}
}
请注意,next 是节点类型,因为它存储节点的地址。创建与前面示例中使用的相同的两个列表:
public class Main {
public static void main(String[] args)
{
node head = new node(1);
node temp = new node(3);
head.next=temp;
node temp1 = new node(5);
temp.next=temp1;
node head2 = new node(2);
node temp2 = new node(4);
head2.next=temp2;
node temp3 = new node(6);
temp2.next=temp3;
}
}
这将创建如下所示的列表:
每个箭头代表下一个链接。要将两个列表链接在一起,我们需要将一个列表的末尾链接到第二个列表的开头。
这可以按如下方式完成:
node trav=head;
while(trav.next!=null){
trav=trav.next;
}
trav.next=head2;
节点“trav”被启动并指向第一个列表的头部。遍历第一个列表,直到 trav 到达第一个列表的末尾。
当到达末尾时,它将最后一个节点的下一个链接更改为第二个列表的头部。这形成了两个列表之间的链接。
打印所有列表:
public class Main {
public static void main(String[] args)
{
node head = new node(1);
node temp = new node(3);
head.next=temp;
node temp1 = new node(5);
temp.next=temp1;
node head2 = new node(2);
node temp2 = new node(4);
head2.next=temp2;
node temp3 = new node(6);
temp2.next=temp3;
//printing list 1
System.out.println("List 1 :");
node trav = head;
while(trav!=null){
System.out.print(trav.data + " ");
trav=trav.next;
}
System.out.println();
//prinitng list 2
System.out.println("List 2 :");
trav= head2;
while(trav!=null){
System.out.print(trav.data + " ");
trav=trav.next;
}
System.out.println();
//merging the two list
trav=head;
while(trav.next!=null){
trav=trav.next;
}
trav.next=head2;
// printing merged list
System.out.println("merged list :");
trav = head;
while(trav!=null){
System.out.print(trav.data + " ");
trav=trav.next;
}
}
}
我们看到了在 Java 中合并两个列表的不同方法。这些范围从内置函数到基本的 for 循环。上面的最后一个示例让您更深入地了解列表在 Java 中的工作原理。使用上一个示例的方法,您可以更好地控制元素在列表中出现的顺序。