import java.util.ArrayDeque; import java.util.Deque; public class Main { public static void main(String[] args) { Deque<Integer> deque = new ArrayDeque<>(); deque.addFirst(10); deque.addLast(20); deque.addFirst(5); deque.removeLast(); deque.addLast(15); System.out.println(deque); } }
The operations addFirst(10), addLast(20), addFirst(5) result in deque: 5, 10, 20.
Then removeLast() removes 20, leaving 5, 10.
Finally addLast(15) adds 15 at the end, resulting in 5, 10, 15.
A deque allows insertion and removal of elements from both ends, front and rear.
It supports both FIFO and LIFO behaviors depending on usage.
import java.util.ArrayDeque; import java.util.Deque; public class Main { public static void main(String[] args) { Deque<Integer> deque = new ArrayDeque<>(); deque.addFirst(1); deque.addLast(2); deque.removeFirst(); deque.removeFirst(); deque.removeFirst(); } }
Calling removeFirst() on an empty deque throws NoSuchElementException.
Here, after removing two elements, the third removeFirst() tries to remove from empty deque causing the exception.
import java.util.ArrayDeque; import java.util.Deque; public class Main { public static void main(String[] args) { Deque<String> deque = new ArrayDeque<>(); deque.offerLast("A"); deque.offerFirst("B"); deque.offerLast("C"); deque.pollFirst(); deque.offerFirst("D"); System.out.println(deque); } }
Initial deque after offerLast("A"): [A]
After offerFirst("B"): [B, A]
After offerLast("C"): [B, A, C]
pollFirst() removes "B": [A, C]
offerFirst("D"): [D, A, C]
A doubly linked list with head and tail pointers allows O(1) insertions and deletions at both ends.
Singly linked list or array require shifting or traversal, causing O(n) operations.
