好久不见!马上就快端午节“端午安康哦!”但是我好想过儿童节鸭!

好了!切换主题——【多个List合并】这是比较常见的需求啦!所以今天就记录一下五种合并方法,以后请使用执行最快的方法吧!

import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*;

public class MergeList {
public static void main(String []args) {
List<String> list_1 = new ArrayList<>();
List<String> list_2 = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
list_1.add(i + "");
}
for (int i = 10000; i < 20000; i++) {
list_2.add(i + "");
}

LocalDateTime start1 = LocalDateTime.now();
List<String> list = merge1(list_1, list_2);
LocalDateTime end1 = LocalDateTime.now();
System.out.println("merge1花费时间:" + Duration.between(start1, end1).toMillis() + "毫秒");

LocalDateTime start2 = LocalDateTime.now();
List<String> list2 = merge2(list_1, list_2);
LocalDateTime end2 = LocalDateTime.now();
System.out.println("merge2花费时间:" + Duration.between(start2, end2).toMillis() + "毫秒");

LocalDateTime start3 = LocalDateTime.now();
List<String> list3 = merge3(list_1, list_2);
LocalDateTime end3 = LocalDateTime.now();
System.out.println("merge3花费时间:" + Duration.between(start3, end3).toMillis() + "毫秒");


LocalDateTime start4 = LocalDateTime.now();
List<String> list4 = merge4(list_1, list_2);
LocalDateTime end4 = LocalDateTime.now();
System.out.println("merge4花费时间:" + Duration.between(start4, end4).toMillis() + "毫秒");

LocalDateTime start5 = LocalDateTime.now();
List<String> list5 = merge5(list_1, list_2);
LocalDateTime end5 = LocalDateTime.now();
System.out.println("merge5花费时间:" + Duration.between(start5, end5).toMillis() + "毫秒");

}

//1.List接口提供addAll(Collection) 将指定集合的所有元素追加到列表末尾的方法。
private static<T> List<T> merge1(List<T> list1, List<T> list2) {
List<T> list = new ArrayList<>();
list.addAll(list1);
list.addAll(list2);
return list;
}
//2.使用ArrayList构造函数通过第一个列表初始化结果列表,从而避免对的额外调用addAll()
public static<T> List<T> merge2(List<T> list1, List<T> list2)
{
List<T> list = new ArrayList<>(list1);
list.addAll(list2);
return list;
}
// 3.Collections类提供了对集合进行操作的几种有用的静态实用程序方法。
// 一种这样的方法是addAll(Collection, T[])将所有指定的元素添加到指定的集合中
//此方法类似于List.addAll()但可能运行得更快。
public static List<String> merge3 (List <String> list1, List <String> list2)
{
List<String> list = new ArrayList<>();

Collections.addAll(list, list1.toArray(new String[0]));
Collections.addAll(list, list2.toArray(new String[0]));

return list;
}
//4.我们使用静态工厂方法从列表中获取由元素组成的流,
// Stream.of()并使用Collector将所有元素累积到新列表中
public static<T> List<T> merge4(List<T> list1, List<T> list2)
{
return Stream.of(list1, list2)
.flatMap(x -> x.stream())
.collect(Collectors.toList());
}
//5.使用forEach()代替累积所有元素来避免使用收集器
public static<T> List<T> merge5(List<T> list1, List<T> list2)
{
List<T> list = new ArrayList<>();
Stream.of(list1, list2).forEach(list::addAll);

return list;
}
}

执行结果:

JAVA——多个List合并_java