gpt4 book ai didi

java - 当前堆在 Java 中得到更新

转载 作者:行者123 更新时间:2023-12-04 05:08:51 26 4
gpt4 key购买 nike

我正在为 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,

谢谢。

最佳答案

声明

copy.heap=heap;

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

复制数组内容的正确方法是:
System.arraycopy(heap, 0, copy.heap, 0, heap.length);

关于java - 当前堆在 Java 中得到更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com