0

我有一堂课,不过是一对(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. 检查其中一个集合的头部(取决于客户)是否有一对低于(分别高于),相对于d,比给定的对;
  3. 如果存在,则将其删除或执行一些计算,基于i;
  4. 如果它不存在,或者没有被删除,则将给定的对插入到另一个集合中的适当位置。

所以,主要的操作是:

  • 按顺序插入;
  • 取回头部;
  • 取下头。

例子:

  1. 客户进入(4.2, 12)并想看asc
  2. asc与 有一对4.0,低于4.2;
  3. 拆下head ofasc并查看新的head;
  4. 新的头部高于4.2,因此客户端将一对插入到des尾部,因为4.2低于6.0

由于没有客户端想要遍历集合,而是处理当前头部,并且由于插入必须有序且非常快,所以我会说 aPriorityQueue是这项工作的工具。

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

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

4

1 回答 1

1
  • 按顺序插入

PriorityQueue.add()这样做。

  • 取回头

PriorityQueue.peek()这样做。

  • 拆头

PriorityQueue.poll()或者PriorityQueue.remove()那样做。

似乎很适合我。

于 2013-10-01T00:04:18.123 回答