## Introduction to Min-Max Heap in Java

Have you ever heard of a heap in data structure and wondered what it is? A heap is a special type of tree that is used to store and organize data.

It is a complete binary tree that is stored in an array, where each node has a value that is either greater or less than its children. In this article, we will discuss the two types of heap, namely min-heap and max-heap, their benefits, and introduction to min-max heap.

## Types of Heap (Min-Heap and Max-Heap)

A min-heap is a type of heap in which the smallest value is always stored at the root node. It is also called a minimum heap or a min-heap.

In contrast, a max-heap is a type of heap in which the largest value is always stored at the root node. It is also called a maximum heap or a max-heap.

Both min-heap and max-heap are binary heaps, where each node has at most two children.

## Benefits of Heap

The heap data structure provides several benefits, including fast extraction and insertion of the minimum or maximum element. In a min-heap, the smallest value can be extracted in constant time, O(1), while in a max-heap, the largest value can be extracted in constant time, O(1).

Inserting an element into a heap takes O(log N) time, where N is the number of elements in the heap. This time complexity also applies to deleting an element from a heap.to Min-Max Heap

A min-max heap is a type of heap that alternates between minimum and maximum levels.

The root node contains the smallest value, followed by the largest at the second level, and so on. At the next level, it contains the minimum, followed by the maximum, and so on.

This structure provides constant time access to both minimum and maximum elements.

Implement Max-Heap With the PriorityQueue Class and Collections.reverseOrder() in Java

In Java, a heap can be implemented using the PriorityQueue class, which is a part of the Java Collection framework.

It stores the elements in the heap using a binary tree data structure. The PriorityQueue class is a generic class that can store any type of data, such as Integer, String, and so on.

## Creation of Max-Heap

A Max-Heap can be created using the PriorityQueue class by reversing the order of elements using the Collections.reverseOrder() method. Let’s create a Max-Heap of four integer values, 1, 6, 8, and 10.

PriorityQueue

maxHeap.add(1);

maxHeap.add(6);

maxHeap.add(8);

maxHeap.add(10);

## Displaying values in Max-Heap

The largest value in the Max-Heap can be obtained using the peek() method, which returns the value of the root node. Similarly, the largest value can be removed using the poll() or remove() method.

System.out.println(maxHeap.peek()); //Output: 10

maxHeap.poll(); //Removes 10 from Max-Heap

We can also retrieve all the elements in the Max-Heap using an iterator() and by iterating through all elements using a while loop.

Iterator

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

## Checking if the element exists

We can check whether an element exists in the Max-Heap using the contains() method.

maxHeap.contains(8); //Output: true

maxHeap.contains(5); //Output: false

## Conclusion

In conclusion, heaps are useful data structures that provide constant time access to the minimum or maximum element. A min-heap stores the smallest value at the root node, while a max-heap stores the largest value at the root node.

A min-max heap alternates between minimum and maximum levels, providing constant time access to both. In Java, we can use the PriorityQueue class to implement heaps, and by reversing the order, we can create a Max-Heap.

We can retrieve elements from a Max-Heap using the peek(), poll(), or remove() methods, and we can check whether an element exists using the contains() method.

## Implement Min-Heap With the PriorityQueue Class in Java

In the previous section, we learned about the implementation of a max-heap using the PriorityQueue class in Java. In this section, we will see how to implement a min-heap using the same class.

## Implementation of Heap using PriorityQueue Class

A PriorityQueue is a class in the Java collection framework that can be used to implement a heap. By default, the PriorityQueue creates a min-heap.

It stores the elements in a priority order based on their natural ordering or a provided Comparator. It is implemented using a priority queue data structure and internally uses an array to store the binary heap.

## Creation of Min-Heap

To create a min-heap using the PriorityQueue class, we can simply instantiate the class, and then use the add() method to add elements to the heap. PriorityQueue

minHeap.add(4);

minHeap.add(9);

minHeap.add(2);

minHeap.add(8);

In this example, we have created a min-heap of four integer values, 4, 9, 2, and 8.

## Displaying values in Min-Heap

To display the values in the min-heap, we can use the peek() method, which returns the root node element, i.e., the smallest element. System.out.println(minHeap.peek()); // Output: 2

To remove the smallest element from the min-heap, we can use the poll() or remove() method.

These methods remove and return the smallest element from the min-heap. System.out.println(minHeap.poll()); // Output: 2

System.out.println(minHeap.peek()); // Output: 4

In this example, the poll() method removes the smallest element, i.e., 2, from the min-heap, and returns it.

The peek() method then returns the new root node element, which is the smallest value after the element is removed.

## Checking if the Element Exists

To check if an element exists in the min-heap, we can use the contains() method. The contains() method returns true if the element exists in the min-heap, and false otherwise.

System.out.println(minHeap.contains(9)); // Output: true

System.out.println(minHeap.contains(5)); // Output: false

In this example, minHeap.contains(9) returns true because the value 9 exists in the min-heap. minHeap.contains(5) returns false because the value 5 does not exist in the min-heap.

## Summary

In summary, we have learned that we can use the PriorityQueue class to implement a min-heap in Java. The PriorityQueue class creates a min-heap by default, which stores elements in a priority order based on their natural ordering or a provided Comparator.

We can add elements to the min-heap using the add() method and remove the smallest element from the heap using the poll() or remove() method. We can check if an element exists in the min-heap using the contains() method.

In this article, we learned about the implementation of heaps using the PriorityQueue class in Java. We discussed the two types of heap, the min-heap, and max-heap and their benefits.

We also discussed the creation of a min-heap using the PriorityQueue class, how to display, remove, and check for existence of elements in the heap. The use of heaps allows for fast extraction and insertion of the minimum or maximum element.

This is particularly useful in algorithms that require frequent searches for the smallest or largest element. The PriorityQueue class provides a simple and efficient way to implement heaps in Java that can be used in various applications.

Overall, this article emphasizes the importance of understanding data structures like heaps and the benefits they provide in solving complex problems.