我有一堂课,不过是一对(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听起来很糟糕,因为插入会发生在随机索引处,而不是在尾部插入。