2016-12-01 5 views
-3

Ich schreibe einen Priority-Queue-Code mit Arrays. Ich möchte eine Methode erstellen, die die Größe der Warteschlange ändert und die Größe der Warteschlange erweitert, wenn die Warteschlange über die 75% gefüllt ist. Kann jemand helfen?Queue Resize-Methode

hier ist meine Methode:

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

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

    heap[++size] = object; 

    swim(size); 
} 

Antwort

0

Wie wäre:

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

Sollte es T nicht '[] NeuHalde = new T [newSize];'? – Berger

+0

Das 'newHeap' -Array sollte vom Typ T sein. Es sollte' T [] newHeap = (T []) new Object [newSize]; 'sein. Der Compiler wird sich beschweren, dass ein unkontrollierter Cast vorliegt. Sie können sagen, dass es aufhört, sich mit '@SuppressWarnings (" unchecked ") zu beschweren' '. Dies ist vernünftig, weil Sie wissen, dass es Elemente des Typs T enthält. – Imposter

+0

Wenn T ein generischer Typ ist, wird es nicht funktionieren –