Java 求两个数组的交集

Java 求两个数组的交集,java,arrays,intersection,Java,Arrays,Intersection,我的目标是找出数组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.le

我的目标是找出数组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]);
            }
       }
  }
publicstaticvoidmain(字符串[]args){
inta[]={3,10,4,2,8};
int[]b={10,4,12,3,23,1,8};
int[]c;
int i=0;

对于(int f=0;f如果允许,请将ArrayList用于c,它的可扩展数组

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

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

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

int[] c = new int[SOME_SIZE];
最困难的部分是计算某个_大小
应该是多少。因为您正在计算一个交点,所以它最多只能是
a
b
中最小的一个的大小

最后,要分配数组中的元素,只需执行以下操作

c[idx] = a[f]

现在,您需要跟踪idx的去向。我建议从idx=0开始,每次找到要添加到
c

的新元素时,都将其递增。这应该是一种简单的方法

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]);
inta[]={3,10,4,2,8};
int[]b={10,4,12,3,23,1,8};
List aList=Arrays.asList(a);
List bList=Arrays.asList(b);
保留列表(bList);
System.out.println(“a交叉点b”+列表);
int[]c=aList.toArray(新的int[0]);
公共静态void main(字符串[]args){
inta[]={3,10,4,2,8};
int[]b={10,4,12,3,23,1,8};
int[]c=新int[(int)数学最小值(a.长度,b.长度)];
int i=0;

对于(int f=0;f.

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

int[]c=新的int[0];
//...
如果(a[f]==b[k]){
int[]温度=c;
c=新整数[c.长度+1];

对于(int i=0;ii如果这不是严格要求数组ICKIE的家庭作业,请参阅
Set
界面-如果需要进行订单维护,则会稍微复杂一些,但不太复杂。代码就在那里,还有一个i(ndex)这从0开始,但没有被使用。请检查此链接。如果允许的话,我认为您应该澄清这是一个好的解决方案。据我们所知,OP的项目可能有一些限制,不允许使用ArrayList。谢谢。我确信这会满足我的需要,但我还不熟悉ArrayList。谢谢。我确信这是一个很好的解决方案我会做一些我需要做的事情,但我还不熟悉ArrayList。这不会编译。首先,因为
Arrays.asList
返回了一个
列表,这对初学者来说很困惑。但是谢谢:)@AlexandrMelnik如果您感到困惑,我建议您尝试编写一个将一个数组复制到另一个数组的程序。如果您在这个更简单的程序中使用数组仍然存在问题,那么您应该阅读更多有关数组的内容,并返回一些具体问题进行澄清。只要两种方法都正确,我可以选择其中任何一种:)非常感谢。
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]);
        }
       }
  }
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];
    }
//...