我遇到这个问题,到目前为止我在整个程序中使用过Arraylist,现在我需要它的功能也是优先级队列。
所以我做了一些在我看来很明显并像PriorityQueue z = (PriorityQueue) x
一样的表现
其中x是arraylist。
在运行时,这给出了一个错误,这是不可能的。
有没有简单的方法来完成这项工作。我不能将整个数组列表更改为优先级队列,因为那时我将不得不更新所有使用的函数.....
我应该每次从arraylist添加项目到新的优先级队列还是有更好的方法......
非常感谢...
答案 0 :(得分:4)
PriorityQueue pq = new PriorityQueue();
pq.addAll(x);
答案 1 :(得分:0)
优先级队列有许多与之关联的额外代码,以确保优先级队列中的项按优先级排序。数组列表没有该代码,因此您不能将其强制转换为优先级队列。
一般情况下,事情可以安全地转发,但你在这里试图贬低一些东西。你不能这样做,因为无法保证数组列表的排序具有任何优先级。实现这两者的基础数据结构也不保证是相同的。
答案 2 :(得分:0)
没有简单的方法。 ArrayList
实现List
接口,但不是Queue
。
从列表内容创建新队列可能是最简单的。
如果您知道内容按优先级排序,并且您需要非常高效,请尝试使用由Queue
支持的ArrayList
类包装它,如果您需要在一个地方使用类似队列的对象,但在其他地方使用List
是有充分理由的。