java(List或Array数组)求交集、并集、差集, 泛型工具类
业务需要求不同类型的交集、并集、差集为避免代码冗余编写工具类。
注:list 转数组需传入数组,如果将原数组传入将会改变原数组的值,同时泛型数组又不可以实例化,解决方案:Arrays.copyOf(n,list.size()) ,使用copyOf功能,开辟返回集合的等长新数组,避免修改原数组。
public static <T>T[] getIntersection(T[] n,T[] m){
List<T> list= MathUtils.getIntersection(Arrays.asList(n),Arrays.asList(m));
return list.toArray(Arrays.copyOf(n,list.size()));
}
如下为工具类详细代码!!!!
package com.lock.demo.common; import java.util.*; /**
* @author niunafei
* @function
* @email niunafei0315@163.com
* @date 2018/12/21 下午2:24
*/
public class MathUtils { /**
* list 求差集
* @param n
* @param m
* @param <T>
* @return
*/
public static <T>List getDifferenceSet(List<T> n,List<T> m){
//转化最长列表
Set<T> set=new HashSet<>(n.size()>m.size()?n:m);
//循环最短列表
for (T t:n.size()>m.size()?m:n) {
if(set.contains(t)){
set.remove(t);
}else {
set.add(t);
}
}
return new ArrayList(set);
}
/**
* list 求交集
* @param n
* @param m
* @param <T>
* @return
*/
public static <T>List getIntersection(List<T> n,List<T> m){
Set<T> setN= new HashSet<>(n);
Set<T> setM=new HashSet<>(m);
setN.retainAll(setM);
return new ArrayList(setN);
} /**
* list 集合并集
* @param n
* @param m
* @param <T>
* @return
*/
public static <T>List getUnion(List<T> n,List<T> m){
Set<T> setN= new HashSet<>(n);
Set<T> setM=new HashSet<>(m);
setN.addAll(setM);
return new ArrayList(setN);
} /**
* 数组求差集
* @param n
* @param m
* @param <T>
* @return
*/
public static <T>T[] getDifferenceSet(T[] n,T[] m){
List<T> list= MathUtils.getDifferenceSet(Arrays.asList(n),Arrays.asList(m));
return list.toArray(Arrays.copyOf(n,list.size()));
}
/**
* 数组求交集
* @param n
* @param m
* @param <T>
* @return
*/
public static <T>T[] getIntersection(T[] n,T[] m){
List<T> list= MathUtils.getIntersection(Arrays.asList(n),Arrays.asList(m));
return list.toArray(Arrays.copyOf(n,list.size()));
}
/**
* 数组并集
* @param n
* @param m
* @param <T>
* @return
*/
public static <T>T[] getUnion(T[] n,T[] m){
List<T> list=MathUtils.getUnion(Arrays.asList(n),Arrays.asList(m));
return list.toArray(Arrays.copyOf(n,list.size()));
} public static void main(String[] args){
List<Integer> list=new ArrayList<>(Arrays.asList(1,2,3,4));
List<Integer> list1=new ArrayList<>(Arrays.asList(3,4,5,6));
System.out.println("list 差集"+getDifferenceSet(list,list1));
System.out.println("list 并集"+getUnion(list,list1));
System.out.println("list 交集"+getIntersection(list,list1));
Integer[] array=new Integer[]{1,2,3,4};
Integer[] array1=new Integer[]{3,4,5,6};
//差集[1, 2, 5, 6]
System.out.println("array 差集"+Arrays.toString(getDifferenceSet(array,array1)));
//并集[1, 2, 3, 4, 5, 6]
System.out.println("array 并集"+Arrays.toString(getUnion(array,array1)));
//交集[3, 4]
System.out.println("array 交集"+Arrays.toString(getIntersection(array,array1))); } }
https://www.aliyun.com/acts/product-section-2019/new-users?userCode=q3tq2yrp
java(List或Array数组)求交集、并集、差集, 泛型工具类的更多相关文章
- js求对象数组的交集/并集/差集/去重
1.求交集 var arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}]; var arr1Id = [1,2,3] ...
- js求两个数组的交集|并集|差集|去重
let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合) a-b = [1,3] (b-a 差集:属于b但不属于a的集合) b-a = [4 ...
- SQL求 交集 并集 差集
故事是这样的….. 故事情节: 表 tb_test 有两列, colA , colB; 求 colA , colB 的并交差集… -- 计算并集 SELECT DISTINCT colB FROM t ...
- LINQ操作数组(交集,并集,差集,最值,平均,去重复)
数组是大学里经常拿来做算法练习的对象.一些经典算法非常有价值,考试.装逼.面试都十分有用.但现在是效率时代,编程讲究生产效率,利用LINQ,可以让程序猿避免写一些基本算法,把精力花在业务处理上. 下面 ...
- python [] 数组 list 交集 并集 差集
>>> a = [1,2,3] >>> b = [2,4,5] >>> list(set(a).intersection(set(b))) [2] ...
- stl set求交集 并集 差集
#include <iostream>#include <set> using namespace std; typedef struct tagStudentInfo{ i ...
- 如何求ArrayList集合的交集 并集 差集 去重复并集
需要用到List接口中定义的几个方法: addAll(Collection<? extends E> c) :按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾 ...
- java用最少循环求两个数组的交集、差集、并集
import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List ...
- C# 数组的交集、差集、并集
C# 数组的交集.差集.并集 工作中经常会用这方面的知识来检查那些字段是必须输入的,那些是禁止输入. using System; using System.Collections.Generic; u ...
随机推荐
- python 高阶函数一 概念
一.2个概念: 1.变量可以指向函数本身 >>> abs <built-in function abs> >>> f = abs >>> ...
- 洛谷 P3711 仓鼠的数学题【伯努利数+多项式科技】
有个东西叫伯努利数--一开始直接·用第一类斯特林推到自闭 式子来源:https://www.luogu.org/blog/ShadowassIIXVIIIIV/solution-p3711 https ...
- bzoj 1003: [ZJOI2006]物流运输【spfa+dp】
预处理出ans[i][j]为i到j时间的最短路,设f[i]为到i时间的最小代价,转移显然就是 f[i]=min(f[j-1]+ans[j][i]*(i-j+1)+k); #include<ios ...
- bzoj 4310: 跳蚤【后缀数组+st表+二分+贪心】
先求一下SA 本质不同的子串个数是\( \sum n-sa[i]+1-he[i] \),按字典序二分子串,判断的时候贪心,也就是从后往前扫字符串,如果当前子串串字典序大于二分的mid子串就切一下,然后 ...
- 跟我一起玩Win32开发(18):使用对话框的两个技巧
相信大家知道对话框怎么用了,就是先用“资源编辑器”设计一个对话框,然后在代码中加载处理.今天,我向大家分享两个使用对话框的技巧,还是比较实用的.不用担心,先喝杯茶,很简单的,一点也不复杂,总之,看俺写 ...
- Appium问题记录
1.Appium 提示覆盖安装Appium Android Input Manager for Unicode 问题 安卓手机在新版本中Appium 总是提示覆盖安装Appium Android In ...
- SQL-添加字段处理
1.alter table [dbo].[SiteTracks] drop constraint DF__SiteTrack__Audit__47DBAE452.ALTER TAB ...
- UVa 11437 (梅涅劳斯定理) Triangle Fun
题意: 给出三角形ABC顶点的坐标,DEF分别是三边的三等分点.求交点所形成的三角形PQR的面积. 分析: 根据梅涅劳斯定理,我们得到: ,解得 另外还有:,解得 所以AR : RP : PD = 3 ...
- 常用的DOCS命令
1.Help 可以查看当前DOS常用命令,是帮助2.Help dir 查看Dir命令的帮助,使用帮助3.ipconfig 查看当前电脑的IP地址4.ping 127.0.0.1 测试与某一台电脑之间网 ...
- 转 PHP scandir() 函数
实例 列出 images 目录中的文件和目录: <?php $dir = "/images/"; // 以升序排序 - 默认 $a = scandir($dir); // 以 ...