找到两个数组的交集

时间:2012-10-16 16:25:47

标签: java arrays intersection

我的目标是找出数组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]);
            }
       }
  }

5 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

首先,您需要为阵列分配空间:

int[] c = new int[SOME_SIZE];

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

最后,要在数组中指定一个元素,只需执行

c[idx] = a[f]

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

答案 4 :(得分:0)

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

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];
    }
//...