您的位置:首页 > 产品设计 > UI/UE

PriorityQueue 小根堆和大根堆的讨论

2017-09-27 23:17 567 查看
堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。

根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。 

根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆。

借助类PriorityQueue 可以实现小根堆和大根堆。

对于PriorityQueue ,观察帮助文档,可以发现,这是jdk1.5以后引入的,

对它的说明如下:An unbounded priority  queue based on a priority heap,The elements of the priority queue are ordered according to their natural ordering, or by a 
Comparator
 
provided
at queue construction time, depending on which constructor is used.

                               The head of this queue is the least element with respect to the specified ordering.

由此可知,它容量没有界限,且默认排序是自然排序,队头元素是最小元素,故我们可以拿来作为小根堆使用。

(要注意:默认的PriorityQueue并非保证了整个队列都是有序的,只是保证了队头是最小的)

对于大根堆,就要借助于comparator比较器,来实现大根堆。(使用默认的初始容量:11)

[java] view
plain copy

PriorityQueue <Integer> maxHeap = new PriorityQueue<Integer>(11, new Comparator<Integer>() {  

  

    @Override  

    public int compare(Integer o1, Integer o2) {  

        // TODO Auto-generated method stub  

        return o2.compareTo(o1);  

    }  

      

});  

这样就实现了,大根堆的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: