import java.util.Comparator;import java.util.PriorityQueue;publicclassE41MedianOfDynamicArray<T extendsNumber>{//最小优先队列及最大优先队列private PriorityQueue<T> min =newPriorityQueue<>();private PriorityQueue<T> max =newPriorityQueue(Comparator.reverseOrder());publicvoidinsert(T number){//插入数字if(((min.size()+ max.size())&0x1)==0){//如果总个数为偶数
min.offer(number);if(min.size()!=0)
max.offer(min.poll());}else{//如果总个数是奇数
max.offer(number);if(max.size()!=0)
min.offer(max.poll());}}publicdoublegetMedian(){if(max.size()+ min.size()==0)thrownewIllegalArgumentException("No Number Available!");if(((min.size()+ max.size())&0x1)==0)return(max.peek().doubleValue()+ min.peek().doubleValue())/2;elsereturn max.peek().doubleValue();}//测试用例publicstaticvoidmain(String[] args){
E41MedianOfDynamicArray<Integer> median =newE41MedianOfDynamicArray<>();for(int i =1; i <=12; i ++)
median.insert(i);
System.out.println(median.getMedian());}}