找到两个数组的交集

我的目标是找出数组a和b的交集值并将它们存储到一个新的数组c中,因此打印输出将为:3,10,4,8。 如何将给定值分配给第3个数组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]); } } } 

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

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

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

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

 int[] c = new int[SOME_SIZE]; 

困难的部分是弄清楚SOME_SIZE应该是多少。 由于您正在计算交叉点,因此最大可能是ab最小的交叉点的大小。

最后,要在数组中分配一个元素,您就可以了

 c[idx] = a[f] 

现在你需要跟踪idx 。 我建议从idx = 0并在每次找到要添加到c的新元素时递增它。

如果允许,则使用ArrayList表示c,其可扩展数组

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

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

你可以采取临时变量的帮助(但如果你不需要这样做,这基本上是重新发明轮子) –

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