import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 用最少循环求两个数组的交集、差集、并集 * * @author ZQC * */ public class Test { public static void main(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); } } /** * 求并集 * * @param m * @param n * @return */ private static Integer[] getB(Integer[] m, Integer[] n) { // 将数组转换为set集合 Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(m)); Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(n)); // 合并两个集合 set1.addAll(set2); Integer[] arr = {}; return set1.toArray(arr); } /** * 求交集 * * @param m * @param n * @return */ private static Integer[] getJ(Integer[] m, Integer[] n) { List<Integer> rs = new ArrayList<Integer>(); // 将较长的数组转换为set Set<Integer> set = new HashSet<Integer>(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 = {}; return rs.toArray(arr); } /** * 求差集 * * @param m * @param n * @return */ private static Integer[] getC(Integer[] m, Integer[] n) { // 将较长的数组转换为set Set<Integer> set = new HashSet<Integer>(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 = {}; return set.toArray(arr); } }