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);
    
        }
    
    }
  • 相关阅读:
    面试题汇总
    桥接模式
    2010412 面试题
    2010412 面试题1
    访问者模式
    原码、反码、补码什么意思?有什么用?
    装饰模式
    mysql 忘记root密码 进行重置
    运维开源工具一览
    编写一个函数计算小费,小费为总账单的20%
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/7226085.html
Copyright © 2011-2022 走看看