|
| 1 | +import java.util.*; |
| 2 | + |
| 3 | +public class GenericHeap <T extends Comparable <T> >{ |
| 4 | + ArrayList <T> data=new ArrayList<>(); |
| 5 | + HashMap<T,Integer> map=new HashMap<>(); |
| 6 | + public void add(T item) { |
| 7 | + this.data.add(item); |
| 8 | + map.put(item,this.data.size()-1);// |
| 9 | + upHeapify(this.data.size()-1); |
| 10 | + } |
| 11 | + private void upHeapify(int ci) { |
| 12 | + int pi=(ci-1)/2; |
| 13 | + if(isLarger(this.data.get(ci),this.data.get(pi))>0) { |
| 14 | + swap(pi,ci); |
| 15 | + upHeapify(pi); |
| 16 | + } |
| 17 | + } |
| 18 | + public void display() { |
| 19 | + System.out.println(this.data); |
| 20 | + } |
| 21 | + public int size() { |
| 22 | + return this.data.size(); |
| 23 | + } |
| 24 | + public boolean isEmpty() { |
| 25 | + return this.size()==0; |
| 26 | + } |
| 27 | + public T remove() { |
| 28 | + this.swap(0,this.size()-1); |
| 29 | + T rv=this.data.remove(this.size()-1); |
| 30 | + downHeapify(0); |
| 31 | + map.remove(rv); |
| 32 | + return rv; |
| 33 | + } |
| 34 | + private void downHeapify(int pi) { |
| 35 | + int lci=2*pi+1; |
| 36 | + int rci=2*pi+2; |
| 37 | + int mini=pi; |
| 38 | + if(lci<this.size() && isLarger(this.data.get(lci),this.data.get(mini))>0) { |
| 39 | + mini=lci; |
| 40 | + } |
| 41 | + if(rci<this.size() && isLarger(this.data.get(rci),this.data.get(mini))>0) { |
| 42 | + mini=rci; |
| 43 | + } |
| 44 | + if(mini!=pi) { |
| 45 | + this.swap(pi,mini); |
| 46 | + downHeapify(mini); |
| 47 | + } |
| 48 | + } |
| 49 | + public T get() { |
| 50 | + return this.data.get(0); |
| 51 | + } |
| 52 | + //t has higher property then return +ve |
| 53 | + private int isLarger(T t,T o) { |
| 54 | + return t.compareTo(o); |
| 55 | + } |
| 56 | + private void swap(int i,int j) { |
| 57 | + T ith=this.data.get(i); |
| 58 | + T jth=this.data.get(j); |
| 59 | + this.data.set(i,jth); |
| 60 | + this.data.set(j,ith); |
| 61 | + map.put(ith,j); |
| 62 | + map.put(jth,i); |
| 63 | + } |
| 64 | + public void updatePriority(T item) { |
| 65 | + int index=map.get(item); |
| 66 | + //because we enter lesser value then old vale |
| 67 | + upHeapify(index); |
| 68 | + } |
| 69 | +} |
0 commit comments