2016-12-01 120 views
-3

我在寫一個使用數組的優先級隊列代碼。我想創建一個方法來改變隊列的大小,並在隊列填滿75%時擴展隊列的大小。誰能幫忙?隊列調整大小的方法

這裏是我的方法:

public void insert(T object) { 
    if (object == null) throw new IllegalArgumentException(); 

    if (size == heap.length - 1) throw new IllegalStateException(); 

    heap[++size] = object; 

    swim(size); 
} 

回答

0

如何:

public void insert(T object) { 
    if (object == null) throw new IllegalArgumentException(); 

    if (size >= 0.75*heap.length) { 
     resize(2*heap.length); 
    } 

    heap[++size] = object; 
} 

private void resize(int newSize) { 
    T[] newHeap = (T[])new Object[newSize]; 
    System.arraycopy(heap, 0, newHeap, 0, size); 
    heap = newHeap; 
} 
+0

它不應該是'T [] newHeap =新的T [新尺寸]'? – Berger

+0

'newHeap'數組應該是T類型的,它應該是'T [] newHeap =(T [])new Object [newSize];'編譯器會抱怨說有一個未經檢查的轉換。你可以通過'@SuppressWarnings(「unchecked」)'告訴它停止抱怨。這是合理的,因爲你知道它將持有類型T的元素。 – Imposter

+0

如果T是泛型類型,它將不起作用 –