java實用方法整理(二十七)——PriorityQueue實現最小堆和最大堆

1,PriorityQueue默認實現的是最小堆

import java.util.PriorityQueue;

/**
* @author Manduner_TJU
* @version 創建時間:2019年4月10日下午4:51:00
*/
public class Test9 {
	public static void main(String[] args) {
		int[] a = {45,36,18,53,72,30,48,93,15,35};
		//1,默認實現的是最小堆,元素按照natural ordering排序(自然排序,例如,數字的從小到大)
		PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();
		
		for(int i=0;i<a.length;i++) {
			minHeap.offer(a[i]);
		}
		
		while(!minHeap.isEmpty()) {
			System.out.print(minHeap.poll()+" ");
		}
		System.out.println();
		
        //輸出(升序):15 18 30 35 36 45 48 53 72 93 
	}
}

2,通過比較器實現最大堆

import java.util.Comparator;
import java.util.PriorityQueue;

/**
* @author Manduner_TJU
* @version 創建時間:2019年4月10日下午4:51:00
*/
public class Test9 {
	public static void main(String[] args) {
		int[] a = {45,36,18,53,72,30,48,93,15,35};
		//2,通過比較器排序,實現最大堆
		PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>() {

			@Override
			public int compare(Integer o1, Integer o2) {
				/**以下是對比較器升序、降序的理解.
				 *(1) 寫成return o1.compareTo(o2) 或者 return o1-o2表示升序
				 *(2) 寫成return o2.compareTo(o1) 或者return o2-o1表示降序
				 */
				return o2.compareTo(o1);
			}
			
		}) ;
		
		for(int i=0;i<a.length;i++) {
			maxHeap.offer(a[i]);
		}
		
		while(!maxHeap.isEmpty()) {
			System.out.print(maxHeap.poll()+" ");
		}
		System.out.println();

        //輸出(降序):93 72 53 48 45 36 35 30 18 15 
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章