- 优先级队列可以按照任意顺序插入,但总是按照排序的顺序检索
- 自定云对象实现comparble接口,放入优先级队列就可以实现比较了;但如果使用for循环直接获取元素,无法实现比较;需要使用队列的remove,poll,peek这些方法才能获取按优先级排序的元素
- 无论何时调用remove方法,总会删除优先级最高的元素(习惯1为优先级最高)
- 测试代码如下,按Stu 的 age 排序
-
public static void main(String[] args) { PriorityQueue<Stu> queue=new PriorityQueue<>(); queue.add(new Stu("a","1",18)); queue.add(new Stu("c","1",20)); queue.add(new Stu("cd","0",5)); queue.add(new Stu("fr","1",25)); // 使用加强for循环或无法按设定获取结果,直接拿出没有比较 for (Stu s:queue){ System.out.println(s); } System.out.println("获取优先级最高的元素"); // 获取优先级最高的元素 while (!queue.isEmpty()){ System.out.println(queue.poll()); } } @Data // 创建geter,setter方法 @ToString @AllArgsConstructor //创建构造函数 @NoArgsConstructor public class Stu implements Comparable<Stu>{ private String name; private String sex; private Integer age; @Override public int compareTo(Stu o) { return -this.getAge().compareTo(o.getAge()); } }