![]() |
Intro | Lists | Sets | Queues and Deques | Conclusion |
Collectables Queue
3. Queues- Tarun
What is a Queue?
- A collection designed for holding elements prior to processing.
- Follows the First-In-First-Out (FIFO) principle: the first element added is the first one to be removed.
- Useful in scenarios like scheduling( QUEUE SYSTEM IN TOOLKIT FOR EXAMPLE ), task processing, or handling events.
Key Operations
- add(E e): Adds an element to the queue. If the queue is full, it throws an exception.
- remove(): Removes and returns the head (first element) of the queue. Throws an exception if the queue is empty.
- peek(): Returns the head of the queue without removing it. Returns null if the queue is empty.
- isEmpty(): Returns true if the queue contains no elements.
- size(): Returns the number of elements in the queue.
- clear(): Removes all elements from the queue.
Example: Basic Queue Operations
Queue<String> queue = new LinkedList<>();
queue.add("Apple");
queue.add("Banana");
queue.add("Orange");
System.out.println("Queue after adding elements: " + queue);
String removedElement = queue.remove();
System.out.println("Removed element: " + removedElement);
System.out.println("Queue after removing an element: " + queue);
String firstElement = queue.peek();
System.out.println("First element (peek): " + firstElement);
System.out.println("Size of Queue: " + queue.size());
System.out.println("Is Queue empty: " + queue.isEmpty());
queue.clear();
System.out.println("Queue after clearing: " + queue);
System.out.println("Is Queue empty after clear: " + queue.isEmpty());
Queue after adding elements: [Apple, Banana, Orange]
Removed element: Apple
Queue after removing an element: [Banana, Orange]
First element (peek): Banana
Size of Queue: 2
Is Queue empty: false
Queue after clearing: []
Is Queue empty after clear: true
4. Deques- Tarun
What is a Deque?
- A double-ended queue that allows insertion and removal of elements from both ends
- Supports both FIFO (queue) and LIFO (stack) operations
- More flexible than a standard queue
- Common in sliding window problems, undo features, and scheduling tasks
Key Operations
- addFirst(E e): Inserts element at the front
- addLast(E e): Inserts element at the back
- removeFirst(): Removes and returns the front element
- removeLast(): Removes and returns the back element
- peekFirst(): Returns (but does not remove) the front element
- peekLast(): Returns (but does not remove) the back element
- isEmpty(): Returns true if the deque is empty
- size(): Returns the number of elements
- clear(): Removes all elements from the deque
Key Takeaways
- Two-End Access: Add or remove from both front and back
- Stack + Queue Behavior: Use it like either a stack or a queue
- Flexible & Efficient: Ideal for a variety of algorithmic patterns
- Common Implementations: ArrayDeque, LinkedList
- O(1) Operations: Most operations are constant time with ArrayDeque
Example: Basic Deque Operations
import java.util.Deque;
import java.util.ArrayDeque;
Deque<String> deque = new ArrayDeque<>();
deque.addFirst("B");
deque.addLast("C");
deque.addFirst("A");
deque.addLast("D");
System.out.println(deque);
System.out.println(deque.removeFirst());
System.out.println(deque.removeLast());
System.out.println(deque.peekFirst());
System.out.println(deque.peekLast());
System.out.println(deque.isEmpty());
System.out.println(deque.size());
deque.clear();
System.out.println(deque.isEmpty());
[A, B, C, D]
A
D
B
C
false
2
true
Example: Basic Queue Operations
Queue<String> queue = new LinkedList<>();
queue.add("Apple");
queue.add("Banana");
queue.add("Orange");
System.out.println("Queue after adding elements: " + queue);
String removedElement = queue.remove();
System.out.println("Removed element: " + removedElement);
System.out.println("Queue after removing an element: " + queue);
String firstElement = queue.peek();
System.out.println("First element (peek): " + firstElement);
System.out.println("Size of Queue: " + queue.size());
System.out.println("Is Queue empty: " + queue.isEmpty());
queue.clear();
System.out.println("Queue after clearing: " + queue);
System.out.println("Is Queue empty after clear: " + queue.isEmpty());
Queue after adding elements: [Apple, Banana, Orange]
Removed element: Apple
Queue after removing an element: [Banana, Orange]
First element (peek): Banana
Size of Queue: 2
Is Queue empty: false
Queue after clearing: []
Is Queue empty after clear: true