PriorityQueue是否适用于此案例?

时间:2013-09-30 22:25:34

标签: java collections priority-queue

我的课程只有一对(double, int)。我需要保留这些对象的两个集合,这两个集合都按double排序,一个按升序排列,另一个按降序排列。

示例:

asc: [(4.0, 10), (4.5, 8), (5.2, 13), (6.0, 1)]
des: [(32.0, 20), (27.5, 2), (13.65, 4), (6.0, 100)]

主要用法模式是:

  1. 客户输入一对(d, i);
  2. 检查其中一个集合(取决于客户端)的头部 lower (分别为更高),相对于d,比给定的一对;
  3. 如果存在,请根据i的值删除它或执行一些计算;
  4. 如果它不存在,或者没有删除,请在适当的位置插入另一个集合中的给定对。
  5. 所以,主要的操作是:

    • 按顺序插入;
    • 检索头;
    • 移开头部。

    示例:

    1. 客户使用(4.2, 12)输入,并希望查看asc;
    2. asc4.0配对,低于4.2;
    3. 移除asc的头部并查看新头部;
    4. 新的头部高于4.2,因此客户端会在des的尾部插入对,因为4.2低于6.0
    5. 由于没有客户想要遍历集合,而是处理当前的头部,并且由于插入必须按顺序且非常快,我会说PriorityQueue是工作的工具

      我是对的,还是Java中没有更好的数据结构(没有外部库),我不知道?

      例如,ArrayList对于此任务来说听起来很糟糕,因为插入会发生在随机索引上,而不是插入尾部。

1 个答案:

答案 0 :(得分:1)

  
      
  • 按顺序插入
  •   

PriorityQueue.add()就是这么做的。

  
      
  • 检索头
  •   

PriorityQueue.peek()就是这么做的。

  
      
  • 删除头
  •   

PriorityQueue.poll()PriorityQueue.remove()就是这样做的。

似乎非常适合我。