java 寻找两个数组的交集

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12919231/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 10:47:34  来源:igfitidea点击:

Finding the intersection of two arrays

javaarraysintersection

提问by Alexandr Melnik

My aim is to find out values of intersection of arrays a and b and store them into a new array c so the printout will be : 3,10,4,8. How do I assign given values to a 3rd array c ?

我的目标是找出数组 a 和 b 的交集值并将它们存储到一个新数组 c 中,这样打印输出将是:3,10,4,8。如何将给定的值分配给第三个数组 c ?

 public static void main(String[] args) {
        int a[] = {3, 10, 4, 2, 8};
        int[] b = {10, 4, 12, 3, 23, 1, 8};
        int[] c;
        int i=0;
         for(int f=0;f<a.length;f++){
              for(int k=0;k<b.length;k++){
                    if(a[f]==b[k]){
 //here should be a line that stores equal values of 2 arrays(a,b) into array c
            }
          }
        }
            for (int x=0; x<c.length; x++){
             System.out.println(c[i]);
            }
       }
  }

回答by sakthisundar

This should be an easy way to do.

这应该是一个简单的方法。

int a[] = {3, 10, 4, 2, 8};
int[] b = {10, 4, 12, 3, 23, 1, 8};
List<Integer> aList =  Arrays.asList(a);
List<Integer> bList =  Arrays.asList(b);
aList.retainAll(bList);
System.out.println(" a intersection b "+aList);
int[] c = aList.toArray(new int[0]);

回答by taufique

public static void main(String[] args) {
        int a[] = {3, 10, 4, 2, 8};
        int[] b = {10, 4, 12, 3, 23, 1, 8};
        int[] c = new int[(int)Math.min(a.length, b.length)];
        int i=0;
         for(int f=0;f<a.length;f++){
              for(int k=0;k<b.length;k++){
                    if(a[f]==b[k]){
                    c[i] = a[f];
                    i++;
            }
          }
        }
        for (int x=0; x<i; x++){
           System.out.println(c[x]);
        }
       }
  }

Hope it helps. Or if you have time complexity issue then try Java Set.

希望能帮助到你。或者,如果您有时间复杂度问题,请尝试Java Set

回答by Bhesh Gurung

You can take a help of temporary variable (but this is basically reinventing the wheel, if you are not required to do so) -

您可以借助临时变量(但这基本上是在重新发明轮子,如果您不需要这样做)-

int[] c = new int[0];
//...
    if(a[f] == b[k]) { 
        int[] temp = c;
        c = new int[c.length + 1];
        for(int i=0; i<temp.length; i++) {
            c[i] = temp[i];
        }
        c[c.length - 1] = a[f];
    }
//...

回答by banjara

if permitted use ArrayList for c, its growable array

如果允许,将 ArrayList 用于 c,它的可增长数组

ArrayList c = new ArrayList();
.
.
.
.
.
c.add(a[f]);

also if permitted to sort arrays, i recommend you to sort smaller array and then iterate over larger array and binary search in smaller array.

此外,如果允许对数组进行排序,我建议您对较小的数组进行排序,然后迭代较大的数组并在较小的数组中进行二分搜索。

回答by Code-Apprentice

First you need to allocate space for your array:

首先,您需要为数组分配空间:

int[] c = new int[SOME_SIZE];

The hard part is figuring out how much SOME_SIZEshould be. Since you are calculating an intersection, the most it can be is the size of the smallest of aand b.

困难的部分是弄清楚SOME_SIZE应该是多少。因为你是计算一个路口,也可以是最深的是最小的尺寸ab

Finally, to assign an element in the array, you just do

最后,要在数组中分配一个元素,您只需执行

c[idx] = a[f]

Now you need to keep track of where idxgoes. I suggest starting with idx = 0and incrementing it each time you find a new element to add to c.

现在您需要跟踪idx去向。我建议idx = 0每次找到要添加到c.