2015-11-19 91 views
0

我已經創建了一個優先級隊列,並在隊列中填充了項目並使用此隊列作爲基礎,我遍歷它並發現項目的優先級。根據使用某些邏輯將項目移動到子隊列的優先級。如何在JAVA中創建高優先級有界子隊列和低優先級有界子隊列

在我的主程序我創建界子隊列使用靜態報表,我想要做的就是創建一個使用我的父隊列構造函數的構造函數的有界子隊列什麼:public HiLoPriorityQueue(int high_capacity, int low_capacity) 構造應該創建初始容量高優先級子隊列中有界high_capacity和一個容量較低的低優先級有界子隊列low_capacity

可以通過使用父隊列上應用的相同添加和刪除方法從父隊列創建子隊列?

我的主要程序:

public class PQTest { 

    public static void main(String[] args) { 

     HiLoPriorityQueue<Customer> prq = new HiLoPriorityQueue<Customer>(10); 
     Customer c1 = new Customer("Rock",999); 
     Customer c2 = new Customer("Brock",1); 
     Customer c3 = new Customer("UnderTaker",1000); 

     HiLoPriorityQueue<Customer> hq = new HiLoPriorityQueue<Customer>(5); 
     HiLoPriorityQueue<Customer> lq = new HiLoPriorityQueue<Customer>(3); 


     // insert values in the queue 
     prq.add(c1); 
     prq.add(c2); 
     prq.add(c3); 


     // create iterator from the queue 
     Iterator it = prq.iterator(); 

     System.out.println ("Priority queue values are: "); 
     while (it.hasNext()){ 
      Customer c = (Customer) it.next(); 
      System.out.println ("Value: "+ c); 
      System.out.println("Priority is :: "+c.getPriority()); 
      if(c.getPriority() == 1){ 
       if(hq.size() < 5) 
        hq.add(c); 
       else{ 
        if(hq.size() < 5) lq.add(c); 
        else{ 
         lq.remove(); 
         lq.add(c); 
        } 
       } 
      } 
      else{ 
       if(lq.size() < 3) lq.add(c); 
      } 
     } 

    } 

} 

隊列創建類:

+0

「可以子隊列從父隊列通過使用施加在父隊列相同的添加和刪除方法創建??」 - 這似乎很直接。你有沒有試過,你是否面臨任何問題? – 6ton

+0

public HiLoPriorityQueue(int high_capacity,int low_capacity){ \t \t helements = new Object [high_capacity]; \t \t lelements = new Object [low_capacity]; \t \t hq = new HiLoPriorityQueue (high_capacity); \t \t lq = new HiLoPriorityQueue (low_capacity); \t \t count = 0; \t \t head = 0; \t \t tail = 0; \t \t \t}這是我創建的構造函數,當我在我的邏輯hq.add(C)表示,母公司隊列被添加了,但沒有子隊列:( – Dex

+0

我看到了 - 但你沒有代碼在那裏創建2個子隊列 – 6ton

回答

0

你的代碼變得毫無意義。你爲什麼使用Object[]陣列來保存你的HiLoPriorityQueue課程中的元素?使用Object陣列通常是一個壞主意,我認爲按照您的類規範使用ArrayList<E extends BinaryPrioritizable>會更有意義。其次,爲什麼你有helementslelements,因爲他們從來沒有被使用過?

是否可以通過使用父隊列上應用的相同添加和刪除方法從父隊列創建子隊列?

這個問題的答案是的,因爲你的父隊列和你的子隊列是同一類型的。但我不完全確定這是否是你要問的問題,我也不完全確定你想要做什麼。

如果我理解正確的話你,但是,我想你想保持一個低優先級隊列,高優先級隊列。這些應該去你的HiLoPriorityQueue類中和處理內部,每當用戶adds/removes數據。你的優先分離邏輯應該去你的HiLoPriorityQueue類的add()方法中。最後,如果你想要一個數據結構,在低優先級元素之前處理所有高優先級的元素,你應該使用內置的MaxHeap(即PirorityQueue<Customer> q = new PriorityQueue<Customer>()),在這裏指定一個比較器。

希望這會有所幫助。

+0

是的,你理解正確....我試圖在HiLoPriorityQueue中保留一個低優先級的隊列和一個高優先級的隊列....請按照你的建議我試圖修改我的代碼謝謝 – Dex

+0

我根據你的建議更新了我的代碼,現在它工作的很好。 git hub中更新的代碼https://github.com/kakarrot007/PriorityQueue .......欣賞建議或反饋f rom所有改善我的代碼。 – Dex

+0

@ Dex,只是看看你的代碼。我認爲你應該看看數據結構的一些實現,特別是堆/隊列,看看它們如何在底層實現,以更好地理解如何實現你的。我不確定你有多麼新的編程/ Java和你的代碼是什麼(學習,一些應用程序你的建築等),但你的實現並不完全良好的編碼。 –