Queue în Dart

Coadă la care adaugi și scoți rapid elemente la ambele capete (început și sfârșit).

Sintaxă
import 'dart:collection';

abstract interface class Queue<E> implements Iterable<E>
Queue<E>()
Queue<E>.of(Iterable<E> elements)

Ce face Queue

Queue, din dart:collection, este o colecție la care operațiile la capete sunt rapide: addFirst, addLast, removeFirst, removeLast. La o listă, removeAt(0) mută toate celelalte elemente; la o coadă, nu.

Este potrivită pentru „primul venit, primul servit” (FIFO): adaugi la sfârșit, scoți de la început. Nu are acces după poziție ([i]). Queue() creează de fapt un ListQueue.

Ce returnează

O coadă goală (sau, la Queue.of, cu elementele date).

Exemple

Exemplul 1: Coada de la ghișeu

import 'dart:collection';

void main() {
  final ghiseu = Queue<String>();
  ghiseu.add('Ana');
  ghiseu.add('Mihai');
  ghiseu.add('Ioana');
  print('La coadă: $ghiseu');

  while (ghiseu.isNotEmpty) {
    final client = ghiseu.removeFirst();
    print('Servit: $client, mai așteaptă ${ghiseu.length}');
  }
}

Rezultat

La coadă: {Ana, Mihai, Ioana}
Servit: Ana, mai așteaptă 2
Servit: Mihai, mai așteaptă 1
Servit: Ioana, mai așteaptă 0

Exemplul 2: Ultimele 3 mesaje

Când coada depășește 3 elemente, cel mai vechi este scos de la început.

import 'dart:collection';

void main() {
  final recente = Queue<String>();
  for (final m in ['Bună!', 'Ce faci?', 'Vii la film?', 'La 8', 'Ok']) {
    recente.addLast(m);
    if (recente.length > 3) recente.removeFirst();
  }
  print(recente.toList());
}

Rezultat

[Vii la film?, La 8, Ok]

Greșeli frecvente

  • Uiți import 'dart:collection';. Queue nu este în dart:core.
  • Încerci coada[0]. Folosește first sau last; pentru acces după poziție ai nevoie de o listă.

Comenzi înrudite

  • Queue.addFirst: addFirst pune un element la începutul cozii, addLast (la fel ca add) îl pune la sfârșit.
  • Queue.removeFirst: removeFirst scoate și returnează primul element al cozii; removeLast scoate și returnează ultimul element.
  • ListQueue: Implementarea obișnuită a lui Queue, cu elementele într-un tablou circular; permite și elementAt rapid.
  • List: Lista din Dart: elemente în ordine, accesate după poziție, care poate crește sau scădea.