我有一堂课,不过是一对(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)]
主要的使用模式将是:
- 客户以一对进入
(d, i)
; - 检查其中一个集合的头部(取决于客户)是否有一对低于(分别高于),相对于
d
,比给定的对; - 如果存在,则将其删除或执行一些计算,基于
i
; - 如果它不存在,或者没有被删除,则将给定的对插入到另一个集合中的适当位置。
所以,主要的操作是:
- 按顺序插入;
- 取回头部;
- 取下头。
例子:
- 客户进入
(4.2, 12)
并想看asc
; asc
与 有一对4.0
,低于4.2
;- 拆下head of
asc
并查看新的head; - 新的头部高于
4.2
,因此客户端将一对插入到des
尾部,因为4.2
低于6.0
。
由于没有客户端想要遍历集合,而是处理当前头部,并且由于插入必须有序且非常快,所以我会说 aPriorityQueue
是这项工作的工具。
我是对的,还是我不知道的Java 中有更好的数据结构(没有外部库)?
ArrayList
例如,对于这个任务来说,An听起来很糟糕,因为插入会发生在随机索引处,而不是在尾部插入。