24

在保持队列顺序Queue的同时将 a 转换为最快的方法是什么?List

4

6 回答 6

31

最快的方法是首先使用 LinkedList,它可以用作 List 或 Queue。

Queue q = new LinkedList();
List l = (List) q;

否则需要复印

List l = new ArrayList(q);

注意:在处理 PriorityQueue 时,使用循环,轮询每个元素并添加到列表中。PriorityQueue to List 不维护堆顺序。

于 2012-10-08T10:28:45.567 回答
12

传递QueueArrayList构造函数

最简单的方法是创建 aArrayList并将您Queue作为参数传递给 ArrayList 的构造函数,该构造函数采用Collection. AQueue是 a Collection,所以有效。

这是最简单的方法,我也相信最快的方法。

List<?> list = new ArrayList<>( myQueue );
于 2013-12-10T13:02:14.037 回答
6

如果您要从转换PriorityQueue为 a List,请记住它实际上是一个堆,因此使用该poll()方法确定排序,在这种情况下,按照此处其他一些答案中讨论的构造方法进行操作,不会保持队列的自然顺序。

考虑到这一点,您可以按照以下方式进行:

List<E> result = new ArrayList<>(yourPriorityQueue.size());
while (!yourPriorityQueue.isEmpty()) {
    result.add(yourPriorityQueue.poll());
}
于 2019-04-12T18:11:18.150 回答
3
Queue queue = new LinkedList();
...
List list = new ArrayList(queue);
于 2012-10-08T10:28:15.503 回答
2

为已经使用 Java 8 的用户回答老问题
Java 8 提供了使用流的选项,您可以从队列中获取列表:

例如:

Queue<Student> queue = new LinkedList<>();
        Student s1 = new Student("A",2);
        Student s2 = new Student("B",1);
        Student s3 = new Student("C",3);
        queue.add(s1);
        queue.add(s2);
        queue.add(s3);

    List<Student> studentList = queue.stream().collect(Collectors.toCollection(ArrayList::new));
于 2018-09-29T14:50:47.903 回答
1

谷歌:

Queue fruitsQueue = new LinkedList();
fruitsQueue.add("Apples");
fruitsQueue.add("Bananas");
fruitsQueue.add("Oranges");
fruitsQueue.add("Grapes");

List fruitsList = new ArrayList(fruitsQueue);
于 2012-10-08T10:29:18.420 回答