三种方式找出两个list中的不同元素

2019-09-29  本文已影响0人  软萌白甜Hedy

前提假设两个list都无重复元素:

public class TwoListDifTest {
    public static void main(String[] args) {
        List<String> l1 = new ArrayList<>();
        List<String> l2 = new ArrayList<>();
        l1.add("a");
        l1.add("s");
        l1.add("f");
        l1.add("h");
        l1.add("l");
        l2.add("a");
        l2.add("h");
        l2.add("z");
        l2.add("x");

        getDif1(l1,l2);
        getDif2(l1,l2);
        getDif3(l1,l2);

    }
    //1.方法一:两次循环数组+contains()方法:
    private static List<String>getDif1(List<String> l1, List<String> l2){
        long start = System.currentTimeMillis();
        List<String> dif = new ArrayList<>();
        for(String str : l1){
            if(!l2.contains(str)){
                dif.add(str);
            }
        }
        for(String str : l2){
            if(!l1.contains(str)){
                dif.add(str);
            }
        }
        long end = System.currentTimeMillis();
        long t= start-end;
        System.out.println(dif);
        return dif;

    }
    //2.方法二:removeAll()+retainAll()方法:
    private static List<String>getDif2(List<String> l1, List<String> l2){
        long start = System.currentTimeMillis();
        List<String> dif = new ArrayList<>();
        List<String> res = new ArrayList<>();
        dif.addAll(l1);
        //先求出两个list的交集;
        dif.retainAll(l2);
        res.addAll(l1);
        res.addAll(l2);
        //用合集去掉交集,就是不同的元素;
        res.removeAll(dif);
        long end = System.currentTimeMillis();
        long t= start-end;
        System.out.println(res);
        return dif;

    }
    //3.方法三:把数组放进map,key:string,value:次数,最后提取value=1的key;
    private static List<String>getDif3(List<String> l1, List<String> l2){
        List<String> dif = new ArrayList<>();
        Map<String,Integer> map = new HashMap<>();

        for (String str: l1){
            map.put(str,1);
        }
        for(String str : l2){
            if(map.get(str) != null){
                map.put(str,2);
                continue;
            }else {
                map.put(str,1);
            }
        }
        for(Map.Entry<String,Integer> en : map.entrySet()){
            if(en.getValue()==1){
                dif.add(en.getKey());
            }
        }
        System.out.println(dif);
        return dif;

    }
}

上一篇下一篇

猜你喜欢

热点阅读