业务需要求不同类型的交集、并集、差集为避免代码冗余编写工具类。

注: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数组)求交集、并集、差集, 泛型工具类的更多相关文章

  1. js求对象数组的交集/并集/差集/去重

    1.求交集 var arr1 = [{name:'name1',id:1},{name:'name2',id:2},{name:'name3',id:3}]; var arr1Id = [1,2,3] ...

  2. 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 ...

  3. SQL求 交集 并集 差集

    故事是这样的….. 故事情节: 表 tb_test 有两列, colA , colB; 求 colA , colB 的并交差集… -- 计算并集 SELECT DISTINCT colB FROM t ...

  4. LINQ操作数组(交集,并集,差集,最值,平均,去重复)

    数组是大学里经常拿来做算法练习的对象.一些经典算法非常有价值,考试.装逼.面试都十分有用.但现在是效率时代,编程讲究生产效率,利用LINQ,可以让程序猿避免写一些基本算法,把精力花在业务处理上. 下面 ...

  5. python [] 数组 list 交集 并集 差集

    >>> a = [1,2,3] >>> b = [2,4,5] >>> list(set(a).intersection(set(b))) [2] ...

  6. stl set求交集 并集 差集

    #include <iostream>#include <set> using namespace std; typedef struct tagStudentInfo{  i ...

  7. 如何求ArrayList集合的交集 并集 差集 去重复并集

    需要用到List接口中定义的几个方法: addAll(Collection<? extends E> c) :按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾 ...

  8. java用最少循环求两个数组的交集、差集、并集

    import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List ...

  9. C# 数组的交集、差集、并集

    C# 数组的交集.差集.并集 工作中经常会用这方面的知识来检查那些字段是必须输入的,那些是禁止输入. using System; using System.Collections.Generic; u ...

随机推荐

  1. hdoj5667 BestCoder Round #80 【费马小定理(膜拜)+矩阵快速幂+快速幂】

    #include<cstdio> #include<string> #include<iostream> #include<vector> #inclu ...

  2. poj 3294 Life Forms【SA+二分】

    先加入未出现字符间隔把n个串连起来,注意如果串开的char这个间隔字符不能溢出,把这个接起来的串跑SA,二分答案k,判断的时候把连续一段he>=k的分成一组,然后看着一段是否包含了>n/2 ...

  3. 洛谷CF1030F Putting Boxes Together(树状数组)

    题意: 现在有n个物品,第i个物品他的位置在a[i],他的重量为w[i].每一个物品移动一步的代价为他的w[i].目前有2种操作: 1. x y 将第x的物品的重量改为y 2.l r 将编号在 [ l ...

  4. 第十篇 .NET高级技术之委托

    委托是一种可以指向方法的数据类型,可以声明委托类型变量. 声明委托的方式:delegate返回值类型   委托类型名(参数) 比如delegate void MyDel(int n) 注意这里的除了前 ...

  5. oracle错误:1067进程意外终止

    oracle错误:1067进程意外终止我Oracle安装完了之后可以运行的 ,过了一段时间不可以了,就上网找了一下,原来是自己的ip已经改变.我一直使用IP地址的. 将D:\oracle\produc ...

  6. hdu1598 find the most comfortable road 枚举+最小生成树

    #include<cstdio> #include<cstring> #include<algorithm> #define MAXN 210 #define IN ...

  7. C/C++程序计时函数gettimeofday的使用

    linux 环境下 用 clock_t发现不准. 换用 //头文件 #include <sys/time.h> //使用timeval start, end;   gettimeofday ...

  8. 74LVC2G241双缓冲3态驱动器

  9. qconbeijing2015

    http://2015.qconbeijing.com/schedule 大会日程 2015年4月23日,星期四 地点 2号厅 203AB 201AB 9:15 开场致辞 专题 主题演讲 互联网金融背 ...

  10. state vs props

    我们来一个关于 state 和 props 的总结. state 的主要作用是用于组件保存.控制.修改自己的可变状态.state 在组件内部初始化,可以被组件自身修改,而外部不能访问也不能修改.你可以 ...