【问题标题】:Convert a Queue to List将队列转换为列表
【发布时间】:2012-09-28 14:13:07
【问题描述】:

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

【问题讨论】:

标签: java list queue


【解决方案1】:

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

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

否则需要复印

List l = new ArrayList(q);

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

【讨论】:

    【解决方案2】:

    Queue 传递给ArrayList 构造函数

    创建ArrayList 并将Queue 作为参数传递给ArrayList 的constructor 的最简单方法是使用CollectionQueueCollection,这样就可以了。

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

    List<?> list = new ArrayList<>( myQueue );
    

    【讨论】:

    • 应该是公认的答案,它是唯一直接解决问题的答案。该问题涉及Queue 接口。 Queue 有很多实现,它们都与 Java 捆绑在一起,也可以在其他库中找到,例如 Google Guava。其他答案仅涉及LinkedList,这只是众多实现之一。
    【解决方案3】:

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

    考虑到这一点,您可以遵循以下思路:

    List<E> result = new ArrayList<>(yourPriorityQueue.size());
    while (!yourPriorityQueue.isEmpty()) {
        result.add(yourPriorityQueue.poll());
    }
    

    【讨论】:

      【解决方案4】:
      Queue queue = new LinkedList();
      ...
      List list = new ArrayList(queue);
      

      【讨论】:

        【解决方案5】:

        为已经在使用 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));
        

        【讨论】:

        • 如果队列是 PriorityQ,那么这个流方法会保留顺序吗?
        【解决方案6】:

        谷歌:

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

        【讨论】:

          猜你喜欢
          • 2018-12-23
          • 1970-01-01
          • 1970-01-01
          • 2011-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多