Queue集合中的PriorityQueue实现类

来源:互联网 发布:淘宝鹦鹉 编辑:程序博客网 时间:2024/05/30 04:23

Queue用于创建模拟队列这种数据结构,Queue接口中定义了如下几种方法:

方法
  • void add(Object e):将指定元素加入此队列的尾部
  • boolean offer(Object e):将指定元素加入此队列的尾部。当使用有容量限制的队列时,此方法更好用些。
  • Object element():获取队列头部的元素,但是不删除该元素
  • Object peek():获取队列头部的元素,但是不删除该元素。如果此队列为空,则返回null
  • Object poll():获取队列头部的元素,并删除该元素。如果此队列为空,则返回null
  • Object remove():获取队列头部的元素,并删除该元素。

    PriorityQueue实现类:
    PriorityQueue是一个比较标准的队列实现类,因为PriorityQueue保存队列元素的顺序不是按照加入队列的顺序,而是按照元素的大小进行重新排序。
    PriorityQueue不允许插入null元素,他还需要对队列元素进行排序,PriorityQueue有两种排序方式:

    自然排序:

    采用自然顺序的PriorityQueue集合中的元素必须实现了Comparable接口,而且应该是统一个类的多个实例,否则可能导致ClassCastException异常

PriorityQueue pq = new PriorityQueue();        pq.offer(6);        pq.offer(-9);        pq.offer(20);        pq.offer(18);        System.out.println(pq);        System.out.println(pq.poll());        System.out.println(pq);        System.out.println(pq.poll());        System.out.println(pq);        System.out.println(pq.poll());        System.out.println(pq);        System.out.println(pq.poll());        System.out.println(pq);
定制排序

创建PriorityQueue队列时,传入一个Comparator对象,该对象负责对元素进行排序操作,此时不要求队列元素实现Comparable接口

PriorityQueue pq = new PriorityQueue((o1,o2) ->         {            int m1 = (int)o1;            int m2 = (int)o2;            return m1>m2?-1:m1<m2?1:0;        });        pq.offer(6);        pq.offer(-9);        pq.offer(20);        pq.offer(18);        System.out.println(pq);
原创粉丝点击