2013-02-28 1 views
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, -2,
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; 

배열을 복사하지 않습니다. 배열 heap에 대한 참조를 copy.heap에 할당합니다. 따라서 두 필드 모두 : heapcopy.heap은 같은 배열을 가리 킵니다.

배열의 내용을 복사하는 올바른 방법은 다음과 같습니다

System.arraycopy(heap, 0, copy.heap, 0, heap.length); 
관련 문제