Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重复数字数组列表_Java_Arraylist_Duplicate Removal - Fatal编程技术网

Java 重复数字数组列表

Java 重复数字数组列表,java,arraylist,duplicate-removal,Java,Arraylist,Duplicate Removal,我想从两个数组列表中获取所有重复的数字,我的代码几乎适用于所有情况,但不适用于以下情况:set one{2.4,5.6,9,3.1,5.6}set two{9,3.1,5.6,5.6}预期返回{5.6,3.1},实际返回{5.6,5.6,3.1} ArrayList<Double> newList = new ArrayList<Double>(); newList.retainAll(newList); return newList; } Arr

我想从两个数组列表中获取所有重复的数字,我的代码几乎适用于所有情况,但不适用于以下情况:set one
{2.4,5.6,9,3.1,5.6}
set two
{9,3.1,5.6,5.6}
预期返回
{5.6,3.1}
,实际返回
{5.6,5.6,3.1}

  ArrayList<Double> newList = new ArrayList<Double>();
   newList.retainAll(newList);
    return newList;
  }
ArrayList newList=new ArrayList();
newList.retainAll(newList);
返回newList;
}
第一组{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());
}
publicstaticvoidmain(字符串[]args){
双[]t1={2.4,5.6,9,3.1,5.6};
双[]t2={9,3.1,5.6,5.6};
ArrayList newList1=新的ArrayList();
ArrayList newList2=新的ArrayList();
用于(双tt:t1){
新列表1.添加(tt);
}
用于(双tt:t2){
新列表2.添加(tt);
}
新列表1.保留(新列表2);
System.out.println(newList1.toString());
}
输出:

[5.6,9.0,3.1,5.6]


如您所见,retainAll不会删除重复项。尝试使用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);
    }

  }

}

您的方式是可行的,但如果两个列表中的某个数字在其中一个列表中出现多次,它将在“重复项”列表中出现多次

如果您不希望重复列表中出现重复项,请使用集合,或者像这样创建自己的方法(效率不高):

公共静态列表交叉点(列表1、列表2)
{
列表=新的ArrayList();
int i=0;
for(T:list1)
{
if(list2.contains(t)和&!list.contains(t))
{
列表。添加(t);
}
}
退货清单;
}

您需要使用
Set
列表1
中删除重复项:

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);

newList
一开始是空的。对它调用
retain(newList)
没有效果。也许这会有帮助
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;
}
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]