重复数字ArrayList

时间:2014-02-04 20:41:55

标签: java arraylist duplicate-removal

我想从两个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}

4 个答案:

答案 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]