zoukankan      html  css  js  c++  java
  • Java 集合并交补

    示例

    package com.example;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    
    public class ListOpt {
        private List intersect(List ls1, List ls2) {
            List list = new ArrayList(Arrays.asList(new Object[ls1.size()]));
            Collections.copy(list, ls1);
            list.retainAll(ls2);
            return list;
        }
    
        private List union(List ls1, List ls2) {
            List list = new ArrayList(Arrays.asList(new Object[ls1.size()]));
            Collections.copy(list, ls1);
            list.addAll(ls2);
            return list;
        }
    
        private List diff(List ls1, List ls2) {
            List list = new ArrayList(Arrays.asList(new Object[ls1.size()]));
            Collections.copy(list, ls1);
            list.removeAll(ls2);
            return list;
        }
    
        public static void main(String[] args) {
            List<Integer> l1 = new ArrayList<Integer>() {{
                add(1);
                add(2);
                add(3);
            }};
            List<Integer> l2 = new ArrayList<Integer>() {{
                add(2);
                add(3);
                add(4);
            }};
    
            ListOpt opt = new ListOpt();
            List intersectList = opt.intersect(l1, l2);
            List union = opt.union(l1, l2);
            List diff = opt.diff(l1, l2);
    
            print(intersectList);
            print(union);
            print(diff);
    
        }
    
        private static void print(List lst) {
            if (lst.size() == 0) {
                return;
            }
            for (int i = 0; i <lst.size(); ++i) {
                System.out.println(lst.get(i));
            }
            System.out.println("---");
        }
    }

    输出

    2
    3
    ---
    1
    2
    3
    2
    3
    4
    ---
    1
    ---

    在操作之前对原对象进行了拷贝,如果对原对象直接操作会修改原来的对象

    另一种写法

    /**
     * Created by yuhui on 2017/7/11 0011.
     */
    import java.util.HashSet;
    import java.util.Set;
    
    public class TestSet {
    
        public static void main(String[] args) {
    
            Set<String> result = new HashSet<String>();
            Set<String> set1 = new HashSet<String>() {
                {
                    add("王者荣耀");
                    add("英雄联盟");
                    add("穿越火线");
                    add("地下城与勇士");
                }   
            };
    
            Set<String> set2 = new HashSet<String>() {
                {
                    add("王者荣耀");
                    add("地下城与勇士");
                    add("魔兽世界");
                }
            };
    
            result.clear();
            result.addAll(set1);
            result.retainAll(set2);
            System.out.println("交集:" + result);
    
            result.clear();
            result.addAll(set1);
            result.removeAll(set2);
            System.out.println("差集:" + result);
    
            result.clear();
            result.addAll(set1);
            result.addAll(set2);
            System.out.println("并集:" + result);
    
        }
    
    }
  • 相关阅读:
    为什么做java开发的公司需要那么多程序员?
    一篇文章了解架构设计的本质
    深入理解 Java 多线程核心知识
    面试经验总结:注意这几点,面试通过率上涨30%
    程序员一般做到多少岁,那些70后的程序员都消失了?
    连阿里都在用它处理亿万级数据统计,论其对Java程序员的重要性!
    【源码】HashMap源码及线程非安全分析
    基于框架的RPC通信技术原理解析
    如何写好一份技术简历?
    彻底理解Netty,这一篇文章就够了
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/7226085.html
Copyright © 2011-2022 走看看