用于查找重复数组的HashSet

时间:2015-10-03 19:52:28

标签: java arraylist set duplicates hashset

我是HashSets的新手。我应该如何更改此代码才能打印3?有没有比hashset更好的方法?对于这个问题,BST比HashSet好吗?

import java.util.HashSet;
import java.util.Set;
import java.util.ArrayList;

public class FindDuplicates {
    //finding duplicates in array1 and array2 using hashset and putting them into a list
    public ArrayList<Integer> findDuplicates(ArrayList<Integer> list1, ArrayList<Integer> list2){
        ArrayList<Integer> duplicateList = new ArrayList<Integer>();
        Set<Object> listTemp=new HashSet<>();
        if (list1.size() < list2.size()){
            listTemp.add(list1);
            for (int i=0; i<list2.size();i++){
                if (listTemp.contains(list2.get(i)))
                    duplicateList.add(list2.get(i));
            }
        }
        else {
            listTemp.add(list2);
            for (int i=0; i<list1.size();i++){
                if (listTemp.contains(list1.get(i)))
                    duplicateList.add(list1.get(i));
            }
        }

        return duplicateList;
    }

    public static void main(String argc[]){
        FindDuplicates fd= new FindDuplicates();
        ArrayList<Integer> l1=new ArrayList<Integer>();
        ArrayList<Integer> l2=new ArrayList<Integer>();
        l1.add(3);
        l1.add(1);
        l1.add(5);
        l2.add(3);
        System.out.print(fd.findDuplicates(l1, l2));

    }
}

1 个答案:

答案 0 :(得分:4)

您可以使用retainAll方法大大简化此方法:

public ArrayList<Integer> findDuplicates
    (ArrayList<Integer> list1, ArrayList<Integer> list2) {

    Set<Integer> duplicates = new HashSet<>(list1);
    duplicates.retainAll(new HashSet<>(list2));
    return new ArrayList<>(duplicates);
}