importjava.util.ArrayList;importjava.util.Arrays;importjava.util.HashSet;importjava.util.List;importjava.util.Set;/*** 用最少循环求两个数组的交集、差集、并集
*
*@authorZQC
**/
public classTest
{public static voidmain(String[] args)
{
Integer[] m= { 1, 2, 3, 4, 5};
Integer[] n= { 3, 4, 6};
System.out.println("----------并集------------");
Integer[] b=getB(m, n);for(Integer i : b)
{
System.out.println(i);
}
System.out.println("----------交集------------");
Integer[] j=getJ(m, n);for(Integer i : j)
{
System.out.println(i);
}
System.out.println("----------差集------------");
Integer[] c=getC(m, n);for(Integer i : c)
{
System.out.println(i);
}
}/*** 求并集
*
*@paramm
*@paramn
*@return
*/
private staticInteger[] getB(Integer[] m, Integer[] n)
{//将数组转换为set集合
Set set1 = new HashSet(Arrays.asList(m));
Set set2 = new HashSet(Arrays.asList(n));//合并两个集合
set1.addAll(set2);
Integer[] arr={};returnset1.toArray(arr);
}/*** 求交集
*
*@paramm
*@paramn
*@return
*/
private staticInteger[] getJ(Integer[] m, Integer[] n)
{
List rs = new ArrayList();//将较长的数组转换为set
Set set = new HashSet(Arrays.asList(m.length > n.length ?m : n));//遍历较短的数组,实现最少循环
for (Integer i : m.length > n.length ?n : m)
{if(set.contains(i))
{
rs.add(i);
}
}
Integer[] arr={};returnrs.toArray(arr);
}/*** 求差集
*
*@paramm
*@paramn
*@return
*/
private staticInteger[] getC(Integer[] m, Integer[] n)
{//将较长的数组转换为set
Set set = new HashSet(Arrays.asList(m.length > n.length ?m : n));//遍历较短的数组,实现最少循环
for (Integer i : m.length > n.length ?n : m)
{//如果集合里有相同的就删掉,如果没有就将值添加到集合
if(set.contains(i))
{
set.remove(i);
}else{
set.add(i);
}
}
Integer[] arr={};returnset.toArray(arr);
}
}