Java求交集和并集

Java求交集和并集

package org.jerval.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Main {

    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5, 6);
        List<Integer> list2 = Arrays.asList(6, 7);
        List<Integer> list3 = Arrays.asList(4, 5, 6, 7, 8, 9);
        System.out.println(getIntersection(list1, list2, list3));
        System.out.println(getUnionSet(list1, list2, list3));

    }

    // 求交集
    private static <E> List<E> getIntersection(List<E>... list) {
        Set<E> set = new HashSet<E>();
        Map<E,Integer> map = new HashMap<E,Integer>();
        if (null != list) {
            Integer cnt = null;
            for (List<E> listInner:list) {
                if (null != listInner) {
                    for (E item:listInner) {
                        cnt = map.get(item);
                        if (null == cnt) {
                            map.put(item, 1);
                        } else {
                            map.put(item, cnt + 1);
                        }
                    }
                }
            }

            int size = list.length;
            for (Entry<E,Integer> item:map.entrySet()) {
                if (size == item.getValue()) {
                    set.add(item.getKey());
                }
            }
        }
        return new ArrayList<E>(set);
    }

    // 求并集,利用Set来过滤相同元素。
    private static <E> List<E> getUnionSet(List<E>... list) {
        Set<E> set = new HashSet<E>();
        if (null != list) {
            for (List<E> listInner:list) {
                if (null != listInner) {
                    for (E item:listInner) {
                        set.add(item);
                    }
                }
            }
        }
        return new ArrayList<E>(set);
    }
}

 

你可能感兴趣的:(java)