Java合并多个List集合的方法

news/2025/1/20 15:31:38/
1. 使用addAll()方法

方法说明

Java的java.util.List接口提供了addAll()方法,可以直接将一个集合中的所有元素添加到另一个集合中。

示例代码

java">import java.util.ArrayList;
import java.util.List;public class ListMergeExample {public static void main(String[] args) {// 创建两个待合并的ListList<String> list1 = new ArrayList<>();list1.add("Apple");list1.add("Banana");List<String> list2 = new ArrayList<>();list2.add("Cherry");list2.add("Date");// 使用addAll()方法合并两个Listlist1.addAll(list2);System.out.println("合并后的List: " + list1);  // 输出合并后的列表}
}

结果

合并后的List: [Apple, Banana, Cherry, Date]

2. 使用concat()方法(Java 8及以上版本)

从Java 8开始,可以利用Stream API提供的concat()方法来合并两个流,进而合并两个List。

示例代码

java">import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;public class ListMergeExample {public static void main(String[] args) {// 创建两个待合并的ListList<String> list1 = Arrays.asList("Apple", "Banana");List<String> list2 = Arrays.asList("Cherry", "Date");// 使用Stream.concat()方法合并两个ListList<String> mergedList = Stream.concat(list1.stream(), list2.stream()).collect(Collectors.toList());System.out.println("合并后的List: " + mergedList);}
}

结果

合并后的List: [Apple, Banana, Cherry, Date] 

3. 使用CopyOnWriteArrayList类(线程安全场景) 

在并发环境下,可以使用CopyOnWriteArrayList类,其addAll()方法同样适用于合并列表,并且保证线程安全。

java">import java.util.concurrent.CopyOnWriteArrayList;public class ListMergeExample {public static void main(String[] args) {// 创建两个待合并的ListCopyOnWriteArrayList<String> list1 = new CopyOnWriteArrayList<>();list1.add("Apple");list1.add("Banana");CopyOnWriteArrayList<String> list2 = new CopyOnWriteArrayList<>();list2.add("Cherry");list2.add("Date");// 在线程安全的环境下合并两个Listlist1.addAll(list2);System.out.println("合并后的List: " + list1);}
}
4. 使用Collections.union()静态方法

Collections类提供了静态方法union(),可以用来合并两个集合,不过需要注意该方法返回的是Set而非List。 

java">import java.util.*;public class ListMergeExample {public static void main(String[] args) {// 创建两个待合并的ListList<String> list1 = Arrays.asList("Apple", "Banana");List<String> list2 = Arrays.asList("Cherry", "Date");// 使用Collections.union()合并,但注意返回的是SetSet<String> mergedSet = Collections.unmodifiableSet(new HashSet<>(list1));mergedSet.addAll(list2);// 若需要转换回ListList<String> mergedList = new ArrayList<>(mergedSet);System.out.println("合并后的List (without duplicates): " + mergedList);}
}

结果(不包含重复项)

合并后的List (without duplicates): [Apple, Banana, Cherry, Date]

在合并两个Java List时,最常用的是addAll()方法,简单直接且高效。对于需要处理大量数据或者涉及并发场景,可以考虑使用Stream API或者CopyOnWriteArrayList。同时,若要确保合并过程中去除重复项,可以结合使用HashSet或Collections.union()方法。 


http://www.ppmy.cn/news/1564684.html

相关文章

Go 切片:用法和本质

要想更好的了解一个知识点&#xff0c;实战是最好的经历。 题目 我这里放一道题目&#xff1a; package mainimport "fmt"func SliceRise(s []int) {s append(s, 0)for i : range s {s[i]}fmt.Println(s) }func SlicePrint() {s1 : []int{1, 2}s2 : s1s2 append…

搜维尔科技提供完整的人形机器人解决方案以及训练系统

问题&#xff1a;从灵巧手收集的数据是否也会在大脑大模型中训练&#xff0c;或是在专门用于手部控制的单独模型中训练&#xff1f; Q: If the data collected from dexterous hands will be trained as well in the brain large model, or in a separate model dedicated for…

mysql 系统学习1

Linux C/C 操作MySQL - Henkk - 博客园

基于SSM的家庭记账本小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

云原生前端开发:打造现代化高性能的用户体验

引言&#xff1a;前端开发的新风向 在过去的几年中&#xff0c;前端开发领域经历了快速的演变&#xff0c;从早期的静态网页到如今复杂的单页应用&#xff08;SPA&#xff09;&#xff0c;再到微前端架构和渐进式Web应用&#xff08;PWA&#xff09;&#xff0c;前端技术一直处…

用 Python 从零开始创建神经网络(二十二):预测(Prediction)/推理(Inference)(完结)

预测&#xff08;Prediction&#xff09;/推理&#xff08;Inference&#xff09;&#xff08;完结&#xff09; 引言完整代码&#xff1a; 引言 虽然我们经常将大部分时间花在训练和测试模型上&#xff0c;但我们这样做的核心原因是希望有一个能够接受新输入并生成期望输出的…

使用 Parcel 和 NPM 脚本进行打包

使用 Parcel 和 NPM 脚本进行打包 Parcel Parcel 是一个零配置的网页应用程序打包工具&#xff0c;主要用于快速构建现代 JavaScript 应用。 我们可以使用npm直接安装它 npm install --save-dev parcel //这将把 Parcel 添加到 devDependencies 中&#xff0c;表明它是一个…

【Sanic 框架 / 1】深入学习:从入门到进阶

文章目录 一、基础知识学习&#xff08;入门&#xff09;Sanic 简介什么是 Sanic 框架&#xff1f;Sanic 的优势和适用场景1. 高性能2. 异步支持3. 简洁易用4. WebSocket 支持5. 灵活扩展 环境搭建1. 安装 Python&#xff08;3.7 及以上版本&#xff09;2. 创建虚拟环境3. 安装…