Specialized collection types including HashMap, LinkedHashMap, Queue, and SplayTreeMap
The dart:collection library provides specialized collection classes and utilities that supplement the collection support in dart:core. It includes efficient implementations of maps, sets, queues, and linked lists.
An unmodifiable view of another Map. Prevents modifications while allowing reads.
var original = {'a': 1, 'b': 2};var view = UnmodifiableMapView(original);print(view['a']); // 1// view['c'] = 3; // Throws UnsupportedError// Changes to original are visible in vieworiginal['c'] = 3;print(view['c']); // 3
A double-ended queue. Elements can be added or removed from both ends.
// Create a queue (default implementation is ListQueue)var queue = Queue<String>();// Add elementsqueue.add('First'); // Add to endqueue.addLast('Second'); // Add to endqueue.addFirst('Zero'); // Add to frontprint(queue); // (Zero, First, Second)// Remove elementsvar first = queue.removeFirst(); // 'Zero'var last = queue.removeLast(); // 'Second'print(queue); // (First)// Use as FIFO queuequeue.add('A');queue.add('B');queue.add('C');while (queue.isNotEmpty) { print(queue.removeFirst()); // A, B, C}// Use as stack (LIFO)queue.add('X');queue.add('Y');queue.add('Z');while (queue.isNotEmpty) { print(queue.removeLast()); // Z, Y, X}
List-based queue implementation. Efficient for most queue operations.
// Create with initial capacityvar queue = ListQueue<int>(10);// Add elements efficientlyfor (var i = 0; i < 100; i++) { queue.add(i);}// Access like a list (but slower than add/remove from ends)var middle = queue.elementAt(queue.length ~/ 2);
Doubly-linked list based queue. Efficient for frequent insertions/removals.
var queue = DoubleLinkedQueue<String>();// Very efficient add/remove from both endsqueue.addFirst('A');queue.addLast('B');queue.addFirst('C');print(queue); // (C, A, B)// Efficient removalqueue.removeFirst();queue.removeLast();print(queue); // (A)
Need insertion order? Use LinkedHashMap/LinkedHashSet
Need sorted order? Use SplayTreeMap/SplayTreeSet
Need maximum performance? Use HashMap/HashSet
Need a queue? Use Queue/ListQueue
Use unmodifiable views to safely expose internal collections
Consider memory usage - SplayTree uses more memory than hash-based collections
LinkedList is specialized - only use when elements need to know their position
HashMap and HashSet are the default implementations for Map and Set when using literals {}. Use specialized collections when you need specific ordering or performance characteristics.