2

Javaでヒープのクラスを書いています。

クラスヒープには

 class Heap{
     int maxsize=1000;
     int[] heap= new int[maxsize];
     int size=0;
     //.... some methods basically, print, insert and remove

     int[] sortHeap (){
         int[] sorted= new int[size];
         Heap copy= new Heap();
         copy.heap=heap;
         copy.size=size;
         int i=0;
         while (copy.size>0){
             sorted[i]=copy.remove();
             i++;
         }
         return sorted;
     }
 }

私が作成しようとしているメソッドの 1 つは、並べ替えられたヒープを返すことです。元のヒープを破壊したくありません。ただし、このメソッドを呼び出すと、呼び出し元の元のヒープが破棄されます。誰かが私になぜこれが起こるのか説明できますか?

例えば。ヒープが -17,
-1, -7,
1, 0, 2, -5,
17, 57, 27, 3, 127, 9, // 正しく出力されたとします

ここで、test.heapSort(); を呼び出します。結果の配列を出力します。

次に、この後にヒープを印刷すると結果が得られます

127,
127, 127,
57, 57, 127, 27,
27, 57, 27, 3, 127, 9,

ありがとうございました。

4

1 に答える 1

3

ステートメント

copy.heap=heap;

配列をコピーしません。配列heapへの参照を に割り当てるだけcopy.heapです。したがって、両方のフィールド:heapcopy.heap同じ配列を指します。

配列の内容をコピーする正しい方法は次のとおりです。

System.arraycopy(heap, 0, copy.heap, 0, heap.length);
于 2013-02-28T20:02:46.150 に答える