JAVA中将两个列表(List)合并为一个列表
我是总结和简化这篇文章,再比较了add和addAll方法
https://blog.csdn.net/cunchi4221/article/details/107470693?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.pc_relevant_default&utm_relevant_index=4
1.方法一:使用addAll()方法,由于addAll()方法本身就是合并集合的,因此非常简单和方便。例如:
public class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list2.add(5);
list2.add(6);
list2.add(7);
list2.add(8);
List<Integer> list = new ArrayList<>();
list.addAll(list1);
list.addAll(list2);
System.out.println(list1);
System.out.println(list2);
System.out.println(list);
}
}
输出:
[1, 2, 3, 4]
[5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
Process finished with exit code 0
- 1
- 2
- 3
- 4
- 5
2.方法二,通过遍历集合中的元素,并在遍历的过程中完成添加操作。例如:
public class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list2.add(5);
list2.add(6);
list2.add(7);
list2.add(8);
List<Integer> list = new ArrayList<>();
for(int i:list1){
list.add(i);
}
for(int i:list2){
list.add(i);
}
System.out.println(list1);
System.out.println(list2);
System.out.println(list);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
输出:
[1, 2, 3, 4]
[5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
Process finished with exit code 0
- 1
- 2
- 3
- 4
- 5
可以看到结果是一样的。PS:遍历的方法可以使用迭代器等,不一定仅限于for。
现在来简单比较一下运行时间:
使用addAll()方法:
public class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
for (int i = 0; i < 1000000; i++) {
list1.add(i);
list2.add(i);
}
List<Integer> list = new ArrayList<>();
//获取当前系统时间
long startTime = System.currentTimeMillis();
// for(int i:list1){
// list.add(i);
// }
// for(int i:list2){
// list.add(i);
// }
list.addAll(list1);
list.addAll(list2);
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
输出:
10
Process finished with exit code 0
- 1
- 2
- 3
使用遍历的方式:
public class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
for (int i = 0; i < 1000000; i++) {
list1.add(i);
list2.add(i);
}
List<Integer> list = new ArrayList<>();
//获取当前系统时间
long startTime = System.currentTimeMillis();
for(int i:list1){
list.add(i);
}
for(int i:list2){
list.add(i);
}
// list.addAll(list1);
// list.addAll(list2);
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
输出:
111
Process finished with exit code 0
- 1
- 2
- 3
可以看到,直接调用addAll()方法效率要高的多。
最后,比较一下add()和addAll()方法,其实很好理解,add只是添加一个对象元素,addAll()是将一个指定的集合添加至当前集合尾部。但如果add也是添加一个列表呢,答案是只是将这个列表的指引添加进去,只算一个元素,看这个示例就一下子清楚了:
public class Main {
public static void main(String[] args) {
List list1 = new ArrayList();
List list2 = new ArrayList();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list2.add(5);
list2.add(6);
list2.add(7);
list2.add(8);
//调用add函数添加一个对象
list1.add(list2);
//调用addAll函数添加一个列表
// list1.addAll(list2);
System.out.println(list1.size());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
输出:
5
Process finished with exit code 0
- 1
- 2
- 3
调用addAll()方法
public class Main {
public static void main(String[] args) {
List list1 = new ArrayList();
List list2 = new ArrayList();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list2.add(5);
list2.add(6);
list2.add(7);
list2.add(8);
//调用add函数添加一个对象
// list1.add(list2);
//调用addAll函数添加一个列表
list1.addAll(list2);
System.out.println(list1.size());
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
输出:
8
Process finished with exit code 0
- 1
- 2
- 3
可以看到,add()方法只是简单地将列表的指引添加进去了