2017-02-28 103 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得到一個包含所有數組項,但沒有重複的新數組。