2017-02-28 91 views
0

我正在尝试解决这个实验问题 - >接受两个整数数组并返回合并数组

编写一个接受两个整数数组并返回合并数组的方法。使此方法可以在不创建类的对象的情况下在main方法中调用。

现在我的解决方案是此代码 - >

class Merge_array{ 
public static void main(String args[]) 
{ 
    int c[]; 
    int a[]={1,2,3,4,5,6}; 
    int b[]={7,8,9,10,11}; 
    c=merge(a,b); 
    for(int i=0;i<c.length;i++) 
     System.out.println(c[i]+" "); 
} 

static int[] merge(int a[],int b[]) 
{ 
    int[] d=new int[a.length+b.length]; 
    for(int i=0;i<d.length;i++) 
    { 
     if(i<a.length) 
      d[i]=a[i]; 
     else 
      d[i]=b[i-a.length]; 
    } 
    return d; 

    }} 

我返回d []数组引用(返程d)作为我的输出这是在合并(局部变量)方法。我有困惑,这是否是正确的方式(尽管代码正在工作)。因为我正在返回超出范围的数组的引用,我也怀疑在合并调用执行后int d []的内存被java垃圾收集器销毁。

+0

在main()完成之前,不会收集垃圾。当方法完成时,merge()(a','b','d','i')中的变量将超出范围,但它们引用的对象不会被清除,直到它们不再被引用任何地方。 – shmosel

+0

由于数组d的引用已分配给c,因此它不会被垃圾收集。 – Jagroshan

+0

@shmosel感谢您的帮助。是否有任何java文档说变量在被引用之前不会被收集到 – user3464093

回答

-1

假设当你合并你不想重复的记录,那么你可以使用一套(例如一个HashSet)来做到这一点。

Set mergeSet = new HashSet();

mergeSet.addAll(firstArray); 
mergeSet.addAll(secondArray); 

,然后你可以使用 mergeSet.toArray得到一个包含所有数组项,但没有重复的新数组。