zoukankan      html  css  js  c++  java
  • 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);
        }
    
    }
  • 相关阅读:
    python
    HTTP和HTTPS协议,详解
    常用加密算法之非对称加密算法
    Docker容器数据卷-Volume详解
    使用nsenter进入docker容器后端报错 mesg: ttyname failed: No such file or directory
    Docker 查看容器 IP 地址
    Docker容器数据卷volumes-from
    Docker 进入容器的4种方法
    Jmeter之Bean shell使用(二)
    Jmeter之Bean shell使用(一)
  • 原文地址:https://www.cnblogs.com/a2b1/p/7520099.html
Copyright © 2011-2022 走看看