Convert a Queue to List

后端 未结 6 1154
Happy的楠姐
Happy的楠姐 2020-12-31 01:29

What is the fastest way to convert a Queue into a List while keeping the Queue order?

相关标签:
6条回答
  • 2020-12-31 01:37

    Answering to old question for users who are already on java 8
    Java 8 provides the option of using streams and you can get a list from queue as:

    For example:

    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));
    
    0 讨论(0)
  • 2020-12-31 01:42
    Queue queue = new LinkedList();
    ...
    List list = new ArrayList(queue);
    
    0 讨论(0)
  • 2020-12-31 01:49

    Google:

    Queue fruitsQueue = new LinkedList();
    fruitsQueue.add("Apples");
    fruitsQueue.add("Bananas");
    fruitsQueue.add("Oranges");
    fruitsQueue.add("Grapes");
    
    List fruitsList = new ArrayList(fruitsQueue);
    
    0 讨论(0)
  • 2020-12-31 01:52

    The fastest is to use a LinkedList in the first place which can be used as a List or a Queue.

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

    Otherwise you need to take a copy

    List l = new ArrayList(q);
    

    Note: When dealing with PriorityQueue, Use a loop, poll each element and add to list. PriorityQueue to List not maintaining the heap order.

    0 讨论(0)
  • 2020-12-31 01:53

    If you're converting from PriorityQueue to a List, remember that it is in fact a heap, so the ordering is determined using the poll() method, in which case, doing it by the constructor way as discussed in some of the other answers here, won't preserve the natural ordering of the queue.

    Taking that into consideration, you can go along these lines:

    List<E> result = new ArrayList<>(yourPriorityQueue.size());
    while (!yourPriorityQueue.isEmpty()) {
        result.add(yourPriorityQueue.poll());
    }
    
    0 讨论(0)
  • 2020-12-31 01:59

    Pass Queue To ArrayList Constructor

    The easiest way to just create a ArrayList and pass your Queue as an argument in the constructor of ArrayList that takes a Collection. A Queue is a Collection, so that works.

    This is the easiest way and I believe fastest way too.

    List<?> list = new ArrayList<>( myQueue );
    
    0 讨论(0)
提交回复
热议问题