2013-02-28 26 views
2

我正在为java中的堆写入一个类。在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; 
    } 
} 

一个方法我试图创建将返回排序堆。我不想破坏原来的堆。 但是,当我调用这个方法时,我调用它的原始堆被破坏。 有人可以向我解释为什么会发生这种情况?

例如。 说堆是 -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所示,

谢谢。

回答

3

声明

copy.heap=heap; 

不会复制阵列。它只是将参考分配给数组heapcopy.heap。所以这两个字段:heapcopy.heap指向相同的数组。

复制数组的内容正确的方法是:

System.arraycopy(heap, 0, copy.heap, 0, heap.length);