PriorityQueue数据结构

来源:互联网 发布:苹果非线性编辑软件 编辑:程序博客网 时间:2024/05/16 15:58

PriorityQueue这种数据结构支持按照优先级取出里面的元素。这是和其它常用数据结构,比如 ArrayList, Queue, Stack等最大的区别。因为要支持优先级,而heap具有类似的结构,所以,PriorityQueue一般都是基于HEAP实现的。(也可以用其它数据结构实现,但是各种复杂度会有不同。)

基于HEAP实现的PriorityQueue复杂度分析:

add(E e): O(lg n)

poll():  O(lg n) (注意,取出元素只需要O(1), 但是维护HEAP结构需要 O(lg n))

remove(E e): O(n)

下面例子是用Priority Queue保存学生信息,学生类含有姓名和成绩,当把学生保存在Priority Queue里时,成绩最低的学生放在最前面。如果想把成绩最高的放在最前面,只要把compare方法改成 return s2.grade - s1.grade; 即可。

实例1:
     public static void main(String[] args) {
        PriorityQueue<String> pq = new PriorityQueue<String>();
        pq.add("dog");
        pq.add("apple");
        pq.add("fox");
        pq.add("easy");
        pq.add("boy");
        
        while (!pq.isEmpty()) {
         System.out.print("left:");
            for (String s : pq) {
                System.out.print(s + " ");
            }
            System.out.println();
            System.out.println("poll(): " + pq.poll());
        }
    }
输出的结果如下: 
left:apple boy fox easy dog 
poll(): apple
left:boy dog fox easy 
poll(): boy
left:dog easy fox 
poll(): dog
left:easy fox 
poll(): easy
left:fox 
poll(): fox
可以看到,虽然PriorityQueue保持了队列顶部元素总是最小,但内部的其它元素的顺序却随着元素的减少始终处于变化之中
http://blog.csdn.net/hudashi/article/details/6942789
0 0
原创粉丝点击