Queue in Dart

Queue in Dart

About

  • Queues in Dart are ordered collections optimized for adding/removing elements at both ends.
  • Unlike lists, they’re efficient for operations at beginning/end but not for random access.
  • They can store elements of the same type or mixed types.
  • Requires dart:collection library for queue operations.

Main Topics

  1. Queue Creation

    • Definition: How to create and initialize queues in Dart.

    • Example:

      import 'dart:collection';
      
      void main() {
        // Creating an empty queue
        Queue<String> queue = Queue();
      
        // Creating from existing list
        Queue<String> fromList = Queue.from(['A', 'B', 'C']);
      }
  2. Queue Operations

    • Definition: Methods for adding, removing and accessing elements.

    • Example:

      import 'dart:collection';
      
      void main() {
        Queue<String> queue = Queue.from(['A', 'B']);
      
        // Adding elements
        queue.addLast('C');  // Add to end
        queue.addFirst('Z'); // Add to front
      
        // Removing elements
        queue.removeFirst();
        queue.removeLast();
      
        print(queue); // Outputs: {A, B}
      }
  3. Queue Types

    • Definition: Default Queue vs DoubleLinkedQueue.

    • Example:

      import 'dart:collection';
      
      void main() {
        // Default Queue
        Queue<int> defaultQueue = Queue();
        defaultQueue.addAll([1, 2, 3]);
      
        // DoubleLinkedQueue
        DoubleLinkedQueue<int> linkedQueue = DoubleLinkedQueue.from([4, 5, 6]);
      
        print(defaultQueue); // Outputs: {1, 2, 3}
        print(linkedQueue);  // Outputs: {4, 5, 6}
      }
  4. Queue Iteration

    • Definition: Techniques for looping through queue elements.

    • Example:

      import 'dart:collection';
      
      void main() {
        Queue<String> queue = Queue.from(['X', 'Y', 'Z']);
      
        // Using for loop
        for (var item in queue) {
          print(item);
        }
      
        // Using forEach
        queue.forEach((item) {
          print(item);
        });
      }
  5. Queue Methods

    • Definition: Common queue manipulation methods.

    • Example:

      import 'dart:collection';
      
      void main() {
        Queue<int> queue = Queue.from([10, 20, 30]);
      
        // Adding elements
        queue.addLast(40);
        queue.addFirst(5);
      
        // Removing elements
        queue.removeFirst();
        queue.removeLast();
      
        // Clearing queue
        queue.clear();
      
        print(queue); // Outputs: {}
      }

How to Use

  • Creating: Use Queue() constructor or Queue.from()
  • Accessing: Use first and last properties or iteration
  • Modifying: Use addFirst, addLast, removeFirst, removeLast
  • Iterating: Use for-in loops or forEach

How It Works

  • Creation: Can initialize empty or from existing collections
  • Operations: Optimized for O(1) operations at both ends
  • Iteration: Maintains insertion order during iteration
  • Types: Default Queue is efficient for most cases

Example of Queue Operations:

import 'dart:collection';

void main() {
  Queue<String> queue = Queue.from(['First', 'Second']);

  // Modifying queue
  queue.addLast('Third');
  queue.addFirst('Zero');
  queue.removeFirst();

  // Iterating
  queue.forEach((item) {
    print(item); // Outputs: First, Second, Third
  });
}

Conclusion

A Queue in Dart is a specialized collection optimized for efficient insertion and removal at both ends. It excels in FIFO (First-In-First-Out) and LIFO (Last-In-First-Out) operations, offering better performance for these scenarios compared to lists while maintaining element insertion order.