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


    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);
        }
    
    }
  • 相关阅读:
    ndoejs解析req,伪造http请求
    ndoejs创建多重文件夹
    路径path的正则通配符-nodejs
    例题1.5 快速排序
    例题1.3 整数划分问题
    sdcf day4 qaq模拟赛总结
    P1168 中位数
    浅谈LCA
    sdcf day1 qwq比赛题解
    2019山东夏令营划水记
  • 原文地址:https://www.cnblogs.com/a2b1/p/7520099.html
Copyright © 2020-2023  润新知