我是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));
}
}
答案 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);
}