找出兩個List集合重複的元素

前幾天,有個同事問我說怎麼找出兩個List集合中重複的元素,我當時就說一個集合在外面循環,一個集合在內循環,如果兩個元素相等了,就找出來了,我回來一想還是不對,要是數據非常多,這樣循環下去,服務器會卡死的,最後我想了想,用以下兩種方法:

 List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        list1.add("a");
        list1.add("b");
        list1.add("c");
        list1.add("d");
        list2.add("d");
        list2.add("f");
        list2.add("g");
        list2.add("h");
        list2.add("k");

第一種方法:這是把list1集合放到list2中

  list2.addAll(list1);
        HashMap<String,Integer> mapList=new HashMap<>();
        for(String str:list2){
            int count=0;
            if(mapList.get(str)!=null){
                count=mapList.get(str)+1;
            }
            mapList.put(str,count);
        }
        System.out.println("重複的元素是:");
        for(String key:mapList.keySet()){
            if(mapList.get(key)!=null && mapList.get(key)>0){
                System.out.println(key);
            }
        }

第二種方法:

 Map<String,String> map=new HashMap<>();
    String str=null;
    String stp=null;
    String psp=null;
    for(int i=0;i<list1.size();i++){
        str=list1.get(i);
        map.put(str,str);
    }
    for(String spt:map.keySet()){
        System.out.println("key:"+spt+"-----------value:"+map.get(spt));
    }
    System.out.println("==========="+map.entrySet());
    for(int i=0;i<list2.size();i++){
        stp=list2.get(i);
        if(stp.equals(map.get(str))){
            System.out.println("重複的元素:"+stp);
        }
    }

以上就是我用的兩種方法,由於是個菜鳥,所以大神們有更好的方法望指點,在下感激不盡!


補充:
下面是java8新特性去list集合重複的方法,非常簡單,比前的方法簡單多了,
首先是將兩個集合合併在一起,然後就是下面的方法:(list2是合併以後的集合,spa是去重複的新集合)

List<String> spa = list2.stream()
                .distinct()
                .collect(Collectors.toList());

這種方法最簡單,代碼少,清晰明瞭!!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章