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);
        }
    
    }
  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/a2b1/p/7520099.html
Copyright © 2011-2022 走看看