自定义最大堆
package com.njau.dataStructure;
import java.util.ArrayList;
import java.util.PriorityQueue;
public class MaxHeap<E extends Comparable<E>> {
private ArrayList<E> data;
public MaxHeap() {
this.data = new ArrayList<E>();
}
public int getSize() {
return data.size();
}
public Boolean isEmpty() {
return data.size() == 0;
}
private int parent(int index) {
if (index == 0) {
throw new RuntimeException("index-0 doesn`t have parent ");
}
return (index - 1) / 2;
}
private int leftChild(int index) {
return index * 2 + 1;
}
private int rightChild(int index) {
return index * 2 + 2;
}
public void add(E e) {
data.add(e);
siftUp(data.size() - 1);
}
private void siftUp(int index) {
while (index > 0 && data.get(parent(index)).compareTo(data.get(index)) < 0) {
swap(parent(index), index);
}
}
private void swap(int parent, int index) {
if (parent < 0 || parent > data.size() || index < 0 || index > data.size()) {
throw new RuntimeException("Index is illegal ");
}
E e = data.get(parent);
data.set(parent, data.get(index));
data.set(index, e);
}
public E ExtractMax() {
E ret = fundMax();
swap(0, data.size() - 1);
data.remove(data.size() - 1);
siftDown(0);
return ret;
}
private void siftDown(int index) {
PriorityQueue<E> priorityQueue = new PriorityQueue<>();
}
private E fundMax() {
if (data.size() == 0) {
throw new RuntimeException("Can not findMax when heap is empty ");
}
return data.get(0);
}
}