Java 优先级队列是否适用于这种情况?

Java 优先级队列是否适用于这种情况?,java,collections,priority-queue,Java,Collections,Priority Queue,我有一个类,它只不过是一对(double,int)。我需要保留这些对象的两个集合,它们都按双精度排序,一个按升序排序,另一个按降序排序 例如: 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)] 主要的使用模式将是: 客户带着一对(d,i)进入 就d而言,检查其中一个集合的头部(取决于客户)是否比给定的一对更低(或更高) 如果存在,则根据i的值将

我有一个类,它只不过是一对
(double,int)
。我需要保留这些对象的两个集合,它们都按双精度排序,一个按升序排序,另一个按降序排序

例如:

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)]
主要的使用模式将是:

  • 客户带着一对
    (d,i)
    进入
  • d
    而言,检查其中一个集合的头部(取决于客户)是否比给定的一对更低(或更高)
  • 如果存在,则根据
    i
    的值将其删除或执行一些计算
  • 如果它不存在,或者没有被删除,请将给定的对插入另一个集合中的适当位置
  • 因此,主要的操作是:

    • 按顺序插入
    • 取头
    • 取下头部
    例如:

    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)]
    
  • 客户带着
    (4.2,12)
    进入,并希望查看
    asc
  • asc
    4.0
    有一对,低于
    4.2
  • 拆下
    asc的头部
    并查看新头部
  • 新的头部高于
    4.2
    ,因此客户机将该对插入尾部的
    des
    ,因为
    4.2
    低于
    6.0
  • 由于没有客户希望遍历集合,而是处理当前头部,而且插入必须有序且速度相当快,我认为
    PriorityQueue
    是该作业的工具。

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

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

    • 按顺序插入
    PriorityQueue.add()

    • 取回头部
    PriorityQueue.peek()就是这样做的

    • 拆下头部
    PriorityQueue.poll()
    PriorityQueue.remove()
    执行此操作


    看起来非常适合我。

    的确如此。当我写这个问题时,用例变得更清晰了,我只是想知道是否还有其他合适的替代方案。但是我想对我的问题的描述清楚地表明了一个
    优先队列