美文网首页
三种方式找出两个list中的不同元素

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

作者: 软萌白甜Hedy | 来源:发表于2019-09-29 18:35 被阅读0次

    前提假设两个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;
    
        }
    }
    
    

    相关文章

      网友评论

          本文标题:三种方式找出两个list中的不同元素

          本文链接:https://www.haomeiwen.com/subject/xmkqpctx.html