2015-11-19 64 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和你的代码是什么(学习,一些应用程序你的建筑等),但你的实现并不完全良好的编码。 –