快速取两个集合的交集

来源:互联网 发布:vb编程实例 编辑:程序博客网 时间:2024/06/06 07:45

这两天用到了取集合和数组交集的问题,写了两个方法。代码片段如下:

package com.yuanyuan;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class Test2 {    public static void main(String[] args) {        List<Integer> list1 = new ArrayList<>();        list1.add(5);        list1.add(9);        list1.add(12);        List<Integer> list2 = new ArrayList<>();        list2.add(5);        list2.add(9);        list2.add(15);        //List<Integer> list = getIntersection(list1, list2);        List<Integer> list = getIntersection2(list1, list2);        System.out.println(list.toString());//[5, 9]    }    /**     * 取两个集合的交集     * @param <T>     * @param list1     * @param list2     */    public static <T> List<T> getIntersection(List<T> list1, List<T> list2){        List<T> list = new ArrayList<>();        if (list1 != null && list2 != null) {            for (T t : list1) {                if (list2.contains(t)) {                    list.add(t);                }            }        }        return list;    }    public static <T> List<T> getIntersection2(List<T> list1, List<T> list2){        List<T> list = new ArrayList<>();        Map<T, Boolean> map = new HashMap<>();        for (T t : list1) {            map.put(t, false);        }        for (T t : list2) {            if (map.keySet().contains(t)) {                map.put(t, true);            }        }        for (T t : map.keySet()) {            if (map.get(t) == true) {                list.add(t);            }        }        return list;    }}
原创粉丝点击