Queue.offer în Java

offer pune un element la coada cozii, poll îl scoate pe primul (sau dă null), peek îl arată pe primul fără să-l scoată.

Sintaxă
boolean offer(E e)   // adaugă la coadă
E poll()             // scoate din față sau null
E peek()             // primul, fără să-l scoată, sau null

boolean add(E e)     // la fel, dar cu excepții
E remove()
E element()

Ce face Queue.offer

offer(x) adaugă x la sfârșitul cozii și returnează true. Returnează false doar la cozile cu capacitate limitată care sunt pline (de exemplu ArrayBlockingQueue); la ArrayDeque și LinkedList reușește mereu.

poll() scoate și returnează primul element; pe o coadă goală returnează null. peek() returnează primul element fără să-l scoată, tot null pe coadă goală.

Perechile cu excepții sunt add (aruncă IllegalStateException dacă e plină), remove() și element() (aruncă NoSuchElementException dacă e goală).

Parametri

Parametru Descriere
e Elementul adăugat (fără null la ArrayDeque).

Ce returnează

offer: boolean. poll, peek: elementul sau null.

Exemple

Exemplul 1: Comenzi la imprimantă

import java.util.ArrayDeque;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        Queue<String> tiparire = new ArrayDeque<>();
        tiparire.offer("factura_101.pdf");
        tiparire.offer("contract.docx");
        System.out.println("Urmează: " + tiparire.peek());
        System.out.println("Tipărit: " + tiparire.poll());
        System.out.println("Tipărit: " + tiparire.poll());
        System.out.println("Tipărit: " + tiparire.poll());
        System.out.println("Urmează: " + tiparire.peek());
    }
}

Rezultat

Urmează: factura_101.pdf
Tipărit: factura_101.pdf
Tipărit: contract.docx
Tipărit: null
Urmează: null

Exemplul 2: Coadă cu capacitate limitată

ArrayBlockingQueue are loc pentru 2 elemente: al treilea offer returnează false, iar add aruncă excepție.

import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

public class Main {
    public static void main(String[] args) {
        Queue<String> locuri = new ArrayBlockingQueue<>(2);
        System.out.println(locuri.offer("Ana"));
        System.out.println(locuri.offer("Radu"));
        System.out.println(locuri.offer("Elena"));
        try {
            locuri.add("Mihai");
        } catch (IllegalStateException e) {
            System.out.println("add: IllegalStateException, coada e plină");
        }
        System.out.println(locuri);
    }
}

Rezultat

true
true
false
add: IllegalStateException, coada e plină
[Ana, Radu]

Greșeli frecvente

  • Testezi coada goală cu peek() == null când coada poate conține null (la LinkedList). Folosește isEmpty().
  • Folosești element() și remove() fără să verifici dacă e goală. Aruncă excepție; preferă peek()/poll().

Comenzi înrudite

  • Queue: Interfața pentru cozi: elementele intră la coadă și ies din față, în ordinea sosirii (FIFO), ca la ghișeu.
  • Deque.offerFirst: offerFirst adaugă un element la începutul unui Deque, offerLast la sfârșit. Returnează true dacă a reușit.
  • Deque.pollFirst: pollFirst și pollLast scot primul sau ultimul element dintr-un Deque; peekFirst și peekLast doar îl arată. Pe gol dau null.
  • PriorityQueue: Coadă cu priorități: poll() scoate mereu cel mai mic element (sau primul după un Comparator), nu pe cel adăugat primul.
  • ArrayDeque: Implementarea recomandată pentru cozi și stive: un array circular care crește automat, rapid la ambele capete.