1、前言
優先級隊列是不同於先進先出隊列的另一種隊列。每次從隊列中取出的是具有最高優先權的元素。
PriorityQueue是從JDK1.5開始提供的新的數據結構接口。
如果想實現按照自己的意願進行優先級排列的隊列的話,需要實現Comparator接口。如果不提供Comparator的話,優先隊列中元素默認按自然順序排列,也就是數字默認是小的在隊列頭,字符串則按字典序排列。
2、java實現
import java.text.DecimalFormat; import java.util.Comparator; import java.util.PriorityQueue; import java.util.Queue; /** * @Author:sks * @Description: * @Date:Created in 10:39 2018/1/11 * @Modified by: **/ //二維平面上一個點 class point { //坐標x double x; //坐標y double y; public point(double x, double y){ this.x = x; this.y = y; } } class PointComparator { private point pointOne; private point pointTwo; public double distance; public PointComparator(point pointOne,point pointTwo) { this.pointOne = pointOne; this.pointTwo = pointTwo; computeDistance(); } //計算兩點之間距離 private void computeDistance() { double val = Math.pow((this.pointOne.x - this.pointTwo.x),2) + Math.pow((this.pointOne.y - this.pointTwo.y),2); this.distance = Math.sqrt(val); } } public class PriorityQueuep_test { public static void main(String args[]){ Comparator<PointComparator> OrderDistance = new Comparator<PointComparator>(){ public int compare(PointComparator one, PointComparator two) { if (one.distance < two.distance) return 1; else if (one.distance > two.distance) return -1; else return 0; } }; //定義一個優先隊列,用來排序任意兩點之間的距離,從大到小排 Queue<PointComparator> FsQueue = new PriorityQueue<PointComparator>(10,OrderDistance); for (int i=0;i<6;i++){ java.util.Random r= new java.util.Random(10); point one =new point(i*2+1,i*3+2); point two =new point(i*5+2,i*6+3); PointComparator nodecomp = new PointComparator(one,two); DecimalFormat df = new DecimalFormat("#.##"); FsQueue.add(nodecomp); } DecimalFormat df = new DecimalFormat("#.###"); for (int i = 0;i<6;i++){ System.out.println(df.format(FsQueue.poll().distance)); } } }