在保持队列顺序Queue
的同时将 a 转换为最快的方法是什么?List
问问题
49500 次
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
传递Queue
给ArrayList
构造函数
最简单的方法是创建 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 回答