List findIntersection & getUnion

List findIntersection & getUnion 求两个列表的交集和并集

复制代码
package zwf;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

/**
 * 列表工具类
 * 
 * @author ZengWenFeng
 * @date 2025.04.22
 * @mobile 13805029595
 * @email 117791303@qq.com
 */
public class ListUtil
{
	/**
	 * 计算两个列表的交集
	 *
	 * @param listA [1,2,3,4,5]
	 * @param listB [ 2, 4,5,7,8]
	 * @return listC [ 2, 4,5]
	 */
	public static List<Long> findIntersection(List<Long> listA, List<Long> listB)
	{
		if (listA == null || listA.size() <= 0 || listB == null || listB.size() <= 0)
		{
			return null;
		}

		List<Long> result = new ArrayList<Long>();
		for (Long element : listA)
		{
			if (listB.contains(element))
			{
				result.add(element);
			}
		}

		return result;
	}

	/**
	 * 计算两个列表的并集
	 *
	 * @param listA [1,2,3,4,5]
	 * @param listB [ 2, 4,5,7,8]
	 * @return listC [1,2,3,4,5,7,8]
	 */
	public static List<Long> getUnion(List<Long> listA, List<Long> listB)
	{
		if (listA == null && listB == null)
		{
			return new ArrayList<Long>();
		}

		if (listA == null)
		{
			return new ArrayList<Long>(new LinkedHashSet<Long>(listB));
		}

		if (listB == null)
		{
			return new ArrayList<Long>(new LinkedHashSet<Long>(listA));
		}

		LinkedHashSet<Long> unionSet = new LinkedHashSet<>(listA.size() + listB.size());
		if (listA.size() > 0)
		{
			unionSet.addAll(listA);
		}

		if (listB.size() > 0)
		{
			unionSet.addAll(listB);
		}

		return new ArrayList<Long>(unionSet);
	}

	public static void main(String[] args)
	{
		// 初始化列表 A 和 B
		List<Long> listA = new ArrayList<>();
		listA.add(1L);
		listA.add(2L);
		listA.add(3L);
		listA.add(4L);
		listA.add(5L);

		List<Long> listB = new ArrayList<>();
		listB.add(2L);
		listB.add(4L);
		listB.add(5L);
		listB.add(7L);

		// 计算交集
		List<Long> intersection = findIntersection(listA, listB);

		// 输出交集
		System.out.println("交集列表: " + intersection);

		// 计算并集
		List<Long> union = getUnion(listA, listB);

		// 输出并集
		System.out.println("并集列表: " + union);

	}
}
相关推荐
叫我阿柒啊13 分钟前
Java全栈开发实战:从基础到微服务的深度解析
java·微服务·kafka·vue3·springboot·jwt·前端开发
凯尔萨厮30 分钟前
Java学习笔记三(封装)
java·笔记·学习
霸道流氓气质30 分钟前
Java开发中常用CollectionUtils方式,以及Spring中CollectionUtils常用方法示例
java·spring
失散1331 分钟前
分布式专题——5 大厂Redis高并发缓存架构实战与性能优化
java·redis·分布式·缓存·架构
通达的K32 分钟前
Java实战项目演示代码及流的使用
java·开发语言·windows
David爱编程39 分钟前
深入 Java synchronized 底层:字节码解析与 MonitorEnter 原理全揭秘
java·后端
索迪迈科技42 分钟前
Protobuf 新版“调试表示为什么有链接?为什么会打码?我该怎么改代码?
java·log4j·apache
a_blue_ice1 小时前
JAVA 面试 MySQL
java·mysql·面试
月阳羊2 小时前
【硬件-笔试面试题-76】硬件/电子工程师,笔试面试题(知识点:H桥驱动电路的设计要点)
java·单片机·嵌入式硬件·面试·职场和发展
赵星星5202 小时前
MySQL的默认隔离级别:为什么是可重复读(RR)而非读已提交(RC)?
java