Queue Hacks :D
Exploring Queue Stuff
public class QueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
// Adding elements to the queue
queue.add("seven");
System.out.println("Enqueued data: " + "seven");
printQueue(queue);
queue.add("slimy");
System.out.println("Enqueued data: " + "slimy");
printQueue(queue);
queue.add("snakes");
System.out.println("Enqueued data: " + "snakes");
printQueue(queue);
queue.add("sallying");
System.out.println("Enqueued data: " + "sallying");
printQueue(queue);
queue.add("slowly");
System.out.println("Enqueued data: " + "slowly");
printQueue(queue);
queue.add("slithered");
System.out.println("Enqueued data: " + "slithered");
printQueue(queue);
queue.add("southward");
System.out.println("Enqueued data: " + "southward");
printQueue(queue);
// Removing elements from the queue
String data = queue.remove();
System.out.println("Dequeued data: " + data);
printQueue(queue);
data = queue.remove();
System.out.println("Dequeued data: " + data);
printQueue(queue);
data = queue.remove();
System.out.println("Dequeued data: " + data);
printQueue(queue);
data = queue.remove();
System.out.println("Dequeued data: " + data);
printQueue(queue);
data = queue.remove();
System.out.println("Dequeued data: " + data);
printQueue(queue);
data = queue.remove();
System.out.println("Dequeued data: " + data);
printQueue(queue);
data = queue.remove();
System.out.println("Dequeued data: " + data);
printQueue(queue);
}
// Helper method to print the contents of the queue
public static void printQueue(Queue<String> queue) {
System.out.println("Words count: " + queue.size() + ", data: " + String.join(" ", queue));
System.out.println();
}
}
QueueExample.main(null);
import java.util.*;
public class MergeQueues {
public static <T extends Comparable<T>> Queue<T> mergeQueues(Queue<T> queue1, Queue<T> queue2) {
Queue<T> mergedQueue = new LinkedList<>();
while (!queue1.isEmpty() && !queue2.isEmpty()) {
if (queue1.peek().compareTo(queue2.peek()) < 0) {
mergedQueue.offer(queue1.poll());
} else {
mergedQueue.offer(queue2.poll());
}
}
while (!queue1.isEmpty()) {
mergedQueue.offer(queue1.poll());
}
while (!queue2.isEmpty()) {
mergedQueue.offer(queue2.poll());
}
return mergedQueue;
}
public static void main(String[] args) {
Queue<Integer> queue1 = new LinkedList<>(Arrays.asList(1, 3, 5));
Queue<Integer> queue2 = new LinkedList<>(Arrays.asList(2, 4, 6));
System.out.println("Queue 1: " + queue1);
System.out.println("Queue 2: " + queue2);
Queue<Integer> mergedQueue = mergeQueues(queue1, queue2);
System.out.println("Merged Queue: " + mergedQueue);
}
}
MergeQueues.main(null);
Explanation of Hack 2
- The generic method mergeQueues takes two queues (queue1 and queue2) as arguments and returns a new queue mergedQueue
- Method uses a while loop to compare the front elements of both queues and add the smaller element to the new queue
- The method then adds the remaining elements of the non-empty queue to the new queue. Finally returns the merged queue.
In the main method, we create two integer queues queue1 and queue2 with some values and merge them using the mergeQueues method. We then print the merged queue using System.out.println.
import java.util.*;
public class ShuffleQueue {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
System.out.println("//Start with ordered Queue: ");
System.out.println(queue);
// Shuffle the elements in the queue
Collections.shuffle((List<Integer>) queue);
System.out.println("//Finish with shuffled Queue: ");
// Display the shuffled elements in the queue
while (!queue.isEmpty()) {
System.out.print(queue.poll() + " ");
}
}
}
ShuffleQueue.main(null);
Hack 3 Explanation
- Created an integer queue queue with some values
- Then use the Collections.shuffle() method to shuffle the elements in the queue
- The method takes a List as an argument, so we cast the queue to a list using (List
)</li> </ul> </li> - Finally, display the shuffled elements in the queue using a while loop and the poll() method to remove and return the front element of the queue
</ul>When you run this code, you should see the elements in the queue displayed in a random order. The output will vary each time you run the program, depending on how the elements are shuffled.
</div> </div> </div>import java.util.*; public class ReverseQueueUsingStack { public static <T> void reverseQueue(Queue<T> queue) { Stack<T> stack = new Stack<>(); while (!queue.isEmpty()) { stack.push(queue.poll()); } while (!stack.isEmpty()) { queue.offer(stack.pop()); } } public static void main(String[] args) { Queue<Integer> queue = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5)); System.out.println("Original Queue: " + queue); reverseQueue(queue); System.out.println("Reversed Queue: " + queue); } } ReverseQueueUsingStack.main(null);
- Define a generic method reverseQueue that takes a Queue queue as an argument and reverses the order of its elements using a Stack
- The method creates a new Stack stack and uses a while loop to push all the elements of the Queue into the Stack, one by one
- Then uses another while loop to pop each element from the Stack and enqueue it back into the Queue
- Finally, the method returns the reversed Queue
In the main method, we create an integer queue queue with some values and display its original order. We then call the reverseQueue method to reverse the order of the elements in the Queue and display the reversed order.
- The method takes a List as an argument, so we cast the queue to a list using (List