java集合之PriorityQueue

来源:互联网 发布:爵士舞蹈教学软件 编辑:程序博客网 时间:2024/06/15 21:30

public class PriorityQueue<E> extends AbstractQueue<E>    implements java.io.Serializable

1,内部使用数组实现的二叉堆存储元素,初始容量为11.

2,通过比较器进行排序.保证堆顶永远为权值最小的元素.

3,add()和offer(),在PriorityQueue里是一样的

在数组末尾增加元素,然后用siftUpComparable()调整,小于父节点就交换.

private void siftUpComparable(int var1, E var2) {    Comparable var3;    int var4;    for(var3 = (Comparable)var2; var1 > 0; var1 = var4) {        var4 = var1 - 1 >>> 1;   //父节点的下标        Object var5 = this.queue[var4];        if(var3.compareTo(var5) >= 0) {            break;        }        this.queue[var1] = var5;    }    this.queue[var1] = var3;}
4,poll(),取出堆顶元素,然后siftDownComparable()进行调整,将权值最小的元素调整到堆顶

private void siftDownComparable(int var1, E var2) {    Comparable var3 = (Comparable)var2;    int var5;    for(int var4 = this.size >>> 1; var1 < var4; var1 = var5) {        var5 = (var1 << 1) + 1;        Object var6 = this.queue[var5];        int var7 = var5 + 1;        if(var7 < this.size && ((Comparable)var6).compareTo(this.queue[var7]) > 0) {            var5 = var7;            var6 = this.queue[var7];        }        if(var3.compareTo(var6) <= 0) {            break;        }        this.queue[var1] = var6;    }    this.queue[var1] = var3;}
5,里面有顺序迭代器Iterator和并行迭代器Spliterator(java 8新增)




原创粉丝点击