2016-05-07 59 views
0

我需要實現自定義優先級隊列,而不使用PriorityQueue形式的Java.Util ...我有三種基本方法:插入,刪除和清除。所有的操作必須在O(log n)的時間內完成。我怎樣才能做到這一點?我應該使用哪些算法進行這些操作?最後,我應該使用哪種類型的容器來保存通用值?如何在java中使用基本方法實現通用的PriorityQueue?

這是我到目前爲止已經完成了...

public class PriorityQueue<E extends Comparable<? super E>> implements Comparable { 
    private Stack<E> queue = new Stack<>(); 
    private int size; 


    public PriorityQueue(int size) { 
     this.size = size; 
    } 

    public PriorityQueue() { 
     size = 50000; 
    } 

    public void insert(E value) { 
     if (value == null) { 
      throw new NullPointerException(); 
     } 
     //how can I insert a value and what container should I use ? 

    } 

    public void remove() { 
     //remove largest 
    } 

    public int compareTo(Object o) { 
     if (o != null && o instanceof PriorityQueue) { 
      PriorityQueue anotherQueue = (PriorityQueue) o; 
      return this.size - anotherQueue.size; 
     } else { 
      throw new ClassCastException(); 
     } 
    } 
} 

不多..但幫助將不勝感激!

+0

O(log N)不是恆定時間。 O(1)是恆定時間。你不能在固定時間內實現它,但O(日誌N)是內置庫實現的。我假設你已經閱讀了內置庫,因爲它有源代碼和文檔....你是否真的需要實現Comparable?爲什麼你會使用未分類的集合,即Stack作爲底層結構? –

+0

'PriorityQueue'在內部使用[heap](https://en.wikipedia.org/wiki/Heap_(data_structure))。 – Jeffrey

+0

Stack不是一個好主意,也許arrayList會更好?但是我正面臨着操作算法的問題...... – Gustavo

回答

相關問題