我想从两个arrayLists获取所有重复的数字,我的代码几乎适用于所有情况,但不适用于以下情况:设置一个{2.4, 5.6, 9, 3.1, 5.6}
设置两个{9, 3.1, 5.6, 5.6}
预期返回{{1} },实际返回{5.6, 3.1}
。
{5.6, 5.6, 3.1}
答案 0 :(得分:1)
您的方式有效,但如果两个列表中的数字在其中一个列表中多次出现,则会在重复列表中多次出现。
如果你不想在重复列表中使用重复集,或者使用这样的方法(效率不高):
public static <T> List<T> intersection(List<T> list1, List<T> list2)
{
List<T> list = new ArrayList<T>();
int i = 0;
for (T t : list1)
{
if (list2.contains(t) && !list.contains(t))
{
list.add(t);
}
}
return list;
}
答案 1 :(得分:0)
设置一个 {2.4,5.6,9,3.1,5.6} 设置两个 {9,3.1,5.6,5.6}
鉴于你已经说过它们已成套,为什么这些套装中有重复?
public static void main(String[] args){
double[] t1 = {2.4, 5.6, 9, 3.1, 5.6};
double[] t2 = {9, 3.1, 5.6, 5.6};
ArrayList<Double> newList1 = new ArrayList<Double>();
ArrayList<Double> newList2 = new ArrayList<Double>();
for(double tt:t1){
newList1.add(tt);
}
for(double tt:t2){
newList2.add(tt);
}
newList1.retainAll(newList2);
System.out.println(newList1.toString());
}
输出:
[5.6,9.0,3.1,5.6]
如您所见,retainAll不会删除重复项。尝试使用设置。
答案 2 :(得分:0)
订购了List,但不保证其成员是唯一的。因此,如果您需要两个集合中的唯一成员集,则需要使用Set来过滤它们。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TestRetainAll {
public static void main(String[] args) {
List<Double> list1 = new ArrayList<>();
list1.addAll(Arrays.asList(new Double[] {2.4, 5.6, 9.0, 3.1, 5.6}));
List<Double> list2 = Arrays.asList(new Double[] {9.0, 3.1, 5.6, 5.6});
list1.retainAll(list2);
System.out.println("List (which may contain duplicates)");
for (Double d : list1) {
System.out.println(d);
}
Set<Double> set = new HashSet<>();
set.addAll(list1);
System.out.println("Set (which cannot contain duplicates)");
for (Double d : set) {
System.out.println(d);
}
}
}
生成此输出:
List (which may contain duplicates)
5.6
9.0
3.1
5.6
Set (which cannot contain duplicates)
5.6
3.1
9.0
答案 3 :(得分:0)
您需要使用Set
删除list1
:
List<Double> list1 = new ArrayList<>(Arrays.asList(2.4, 5.6, 9.0, 3.1, 5.6));
List<Double> list2 = new ArrayList<>(Arrays.asList(9.0, 3.1, 5.6, 5.6));
HashSet<Double> set1 = new HashSet<>(list1);
set1.retainAll(list2 );
System.out.println("set1 = " + set1);
结果是:
set1 = [5.6, 3.1, 9.0]