从两个列表中删除重复的公共输出

时间:2016-04-13 06:46:36

标签: java

我有两个数组。我希望输出是两个列表之间的公共数字,但是下面的代码将输出重复的公共数字。

 double[] arr1 = {100.00, 100.00, 17246.40, 2568.00, 0.20, 9845.00, 5768.18, 0.20, 30.00,
      63.68, 83.56, 444.39, 144.20, 2889.00};

 double[] arr2 = {2000.90, 508.07, 100.00, 17246.40, 5899.38, 17246.40, 17246.40, 2568.00,
      83.56, 144.20, 2889.00, 3000.00, 2568.00, 60.00, 3135.00, 28329.91, 3135.00, 9845.00};

 for(int i=0; i<arr1.length; i++){
      for(int j=0; j<arr2.length; j++){
           if(arr1[i] == arr2[j]){
                System.out.println(arr1[i]);

任何人都可以帮助只输出两个数组之间的公共数字并删除重复的数字吗?

感谢。

4 个答案:

答案 0 :(得分:1)

将您的值存储在一个集合中。集合会自动消除重复。

 Set<Double> set = new HashSet<Double>();

 for(int i = 0; i < arr1.length; i++){
   set.add(arr1[i]);
 }
 for(int j = 0; j < arr2.length; j++){
   set.add(arr2[j]);
 }

 Double[] array = set.toArray(new Double[0]);
 // Output goes here
 System.out.println(Arrays.toString(array));

如果arr1的长度与arr2相同,则可以在一个for循环

中处理

答案 1 :(得分:1)

Streams怎么样? 可能更高效(无需创建集合)并且更快(参见并行区分和排序)

 double[] arr1 = {100.00, 100.00, 17246.40, 2568.00, 0.20, 9845.00, 5768.18, 0.20, 30.00,
            63.68, 83.56, 444.39, 144.20, 2889.00};

    double[] arr2 = {2000.90, 508.07, 100.00, 17246.40, 5899.38, 17246.40, 17246.40, 2568.00,
            83.56, 144.20, 2889.00, 3000.00, 2568.00, 60.00, 3135.00, 28329.91, 3135.00, 9845.00};

    DoubleStream stream1 = Arrays.stream(arr1);
    DoubleStream stream2 = Arrays.stream(arr2);
    Stream<Double> concat = Stream.concat(stream1.boxed(), stream2.boxed());
    concat.parallel().distinct().sorted().sequential().forEach(System.out::println);

由于没有人在之前发布过输出:

0.2
30.0
60.0
63.68
83.56
100.0
144.2
444.39
508.07
2000.9
2568.0
2889.0
3000.0
3135.0
5768.18
5899.38
9845.0
17246.4
28329.91

答案 2 :(得分:0)

这个怎么样。

for(int i=0; i<arr1.length; i++){
      for(int j=0; j<arr2.length; j++){
           if(arr1[i] == arr2[j]){
                System.out.println(arr1[i]);
                break;
           }
      }
}

在将第一个数组的每个元素与其他数组的所有元素进行比较时,您将获得重复值。因此,如果某个值在第二个数组中出现两次,则会打印出来。只要在匹配一个项目时打破内部循环,就会删除重复的项目。

答案 3 :(得分:-2)

创建一个集合,只需向其中添加常用值即可。

double[] arr1 = {100.00, 100.00, 17246.40, 2568.00, 0.20, 9845.00, 5768.18, 0.20, 30.00, 63.68, 83.56, 444.39, 144.20, 
                2889.00};


double[] arr2 = {2000.90, 508.07, 100.00, 17246.40, 5899.38, 17246.40, 17246.40, 2568.00, 83.56, 144.20, 2889.00, 3000.00, 
                2568.00, 60.00, 3135.00, 28329.91, 3135.00, 9845.00};

Set<Double> set = new HashSet<Double>();

for(int i=0;i<arr1.length;i++){

     for(int j=0;j<arr2.length;j++){
           if(arr1[i]==arr2[j])
                set.add(arr1[i]);
     }
}

System.out.println(Arrays.toString(set.toArray()));