2017-02-28 3 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; 

    }} 

Iマージ()メソッド内のローカル変数であり、私の出力としてD []配列参照(戻りD)を返すしています。これが正しい方法であるかどうか(コードは機能していますが)、私は混乱しています。私は主に範囲外になる配列の参照を返しているので、私はint d []のメモリを呼び出してmergeを実行した後も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を使用することができます。

関連する問題