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;
     }
 }

我尝试创建的一种方法是返回已排序的堆。我不想破坏原来的堆。但是,当我调用此方法时,我调用它的原始堆会被破坏。有人可以向我解释为什么会这样吗?

例如。说堆是 -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;

不复制数组。它只是将数组的引用分配heapcopy.heap. 所以这两个字段:heapcopy.heap指向同一个数组。

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

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